我如何使用问号'?'在Zend_Db_Select where()子句中?

时间:2012-01-24 20:41:33

标签: php mysql zend-framework

我有以下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()不要尝试并替换问号。怎么样?

1 个答案:

答案 0 :(得分:3)

一般来说,我相信你可以简单地取代“?”带有Zend_Db_Expr('?')的字符串。

在您的情况下,我认为您希望用以下内容替换整个第二个WHERE子句:

->where(new Zend_Db_Expr('LOWER(REPLACE...'))

沿着这些方向......