我有以下 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() 不要尝试替换问号。怎么办?
最佳答案
一般来说,我相信你可以简单地替换“?”带有 Zend_Db_Expr('?') 的字符串。
在您的情况下,我认为您希望将整个第二个 WHERE 子句替换为:
->where(new Zend_Db_Expr('LOWER(REPLACE...'))
类似的东西...
关于php - 我如何在 Zend_Db_Select where() 子句中使用问号 '?'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8993828/