2012-01-24 14 views
3

私は同等のZendの選択()文に変換しようとしている次のMySQLのクエリがあります。「?」を使用するにはどうすればよいですか? Zend_Db_Select where()節で?

SELECT `entity_id` FROM `my_table` WHERE `attribute_id` IN (541,554,555,556) \ 
AND LOWER(REPLACE(TRIM(`value`), '-', '')) REGEXP '([^[:space:]]*)?$param$' 

$paramは英数字のみが含まれるようにフィルタリングされていますPHPの変数です。

$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$") 

ここ

は、私はZendの選択()文で、これまで持っているものですどこで()を使用して疑問符を置き換えないでください。どうやって?

+0

([^ [:スペース:]] *){0,1} foo $ '。私はまだ '?'を使うことができるかどうか知りたいです。 – nachito

+0

'?'文字をエスケープしてプレースホルダとして扱わないようにするにはどうすればいいですか? –

+0

正確には – nachito

答えて

3

一般に、私はあなたが単に "?"文字列にZend_Db_Expr( '?')を付けます。あなたのケースでは

、私はあなたがWHERE句で全体秒を交換したいと思う:私は同等 `REGEXP"を使用することができます実現

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

これらの線に沿って何か...

+0

私は 'LOWER(REPLACEあなたが提案しているように 'Zend_Db_Expr'の中でも同じ動作をしています – nachito

+0

@nachito:これはうまくいきませんか?私はそれを私の側でローカルに試してみて、あなたが望むSQLを得ました –

+0

@ DavidWeinraub私はもう一度試してみましたが、私の間違いです。ありがとうございました。両方とも – nachito