我有下面这个MySQL查询语句,现在想将其翻译成等效的Zend select()语句:
SELECT `entity_id` FROM `my_table` WHERE `attribute_id` IN (541,554,555,556) \
AND LOWER(REPLACE(TRIM(`value`), '-', '')) REGEXP '([^[:space:]]* )?$param$'
$param
是一个PHP变量,经过过滤后只包含字母数字字符。
下面是我使用Zend select()语句实现的代码:
$db->select()
->from('my_table', 'entity_id')
->where('attribute_id IN (?)', array(541,554,555,556))
->where('LOWER(REPLACE(TRIM('
. $db->quoteIdentifier('value')
. '), "-", "")) REGEXP "([^[:space:]]* )?'
. $param
. '$"');
当 $param = 'foo'
时,实际输出的 SQL 语句为:
SELECT `entity_id` FROM `my_table` WHERE (attribute_id IN (541, 554, 555, 556)) \
AND (LOWER(REPLACE(TRIM(`value`), "-", "")) REGEXP "([^[:space:]]* )foo$")
我需要告诉where()方法不要尝试替换问号,应该怎么做?
REGEXP "([^[:space:]]* ){0,1}foo$"
。但我仍然想知道在select()
语句中是否可能使用 '?' 而不被替换。 - nachito?
字符,以免被视为占位符,对吧? - David Weinraub