2017-10-30 5 views
0

これはMagentoの私のクエリです。Zend Framework Magento Where文がエラーを返します

 $where = "LIKE '%".$value."%'"; 
     foreach($tokens as $token) { 
      $where .= " OR at_name.value LIKE '%$token%'"; 
     } 

     $this->getCollection()->getSelect() 
      ->joinInner(array('at_name' => 'mgmx_catalog_product_entity_text'), '(at_name.entity_id = at_visibility.entity_id)') 
      ->where("at_name.value ?" ,$where); 

私はこのクエリを実行する場合、それはエラーを返します

#1064 - あなたのSQL構文でエラーが発生しています。 MariaDBサーバーのバージョンに対応するマニュアルをチェックし、適切な構文を使用して、 '' LIKE \ '%REMAX GRAY%\'またはat_name.value LIKE \ '%REMAX%\'またはat_name.value LIKE \ '

これはMysqlのクエリです。私は''を削除した場合

SELECT COUNT(DISTINCT e.entity_id) 
FROM `mgmx_catalog_product_entity` AS `e` 
INNER JOIN `mgmx_catalog_product_entity_int` AS `at_status` 
ON (`at_status`.`entity_id` = `e`.`entity_id`) AND 
(`at_status`.`attribute_id` = '96') AND (`at_status`.`store_id` = 0) 
INNER JOIN `mgmx_catalog_product_entity_int` AS `at_visibility` 
ON (`at_visibility`.`entity_id` = `e`.`entity_id`) AND 
(`at_visibility`.`attribute_id` = '102') AND (`at_visibility`.`store_id` = 0) 
INNER JOIN `mgmx_catalog_product_entity_text` AS `at_name` ON (at_name.entity_id = at_visibility.entity_id) WHERE (at_name.value 'LIKE 
\'%REMAX GREY%\' OR at_name.value LIKE \'%REMAX%\' OR at_name.value LIKE 
\'%GREY%\'') 

エラーがここにどこか

(at_name.value 'LIKE 
\'%REMAX GREY%\' OR at_name.value LIKE \'%REMAX%\' OR at_name.value LIKE 
\'%GREY%\'') 

あると\は、それが正常に実行されます。ように

私はzendフレームワークが 'とバックスラッシュを行うものであるため、取り除くことはできません。私はこれにどのように対処しますか?

ありがとうございました。

+0

私はzend-frameworkに精通していませんが、バインディングの仕方ではありません。各値にはプレースホルダが必要です。 '? 'は1の値であり、引用符で囲まれています。これにより、SQL文が文字列になります。 'at_name.value =?'を実行した場合、エラーは発生しませんが、結果は得られません。 – chris85

答えて

1

追加の 'とエスケープは、()のメソッドで追加されました。しかし、2番目のパラメータはオプションなので、次のようにステートメントを条件パラメータに置き換えて単純に追加します。

$this->getCollection()->getSelect() 
      ->joinInner(array('at_name' => 'mgmx_catalog_product_entity_text'), '(at_name.entity_id = at_visibility.entity_id)') 
      ->where("at_name.value ".$where); 

PS。まだ管理グリッド内のトークン検索で困惑していますか? :)私はこれをすぐに心配しました。これを実装するさらに洗練された方法があります。 Zend_Db_Selectクラスのwhere()と_where()メソッドを確認してください。

+0

はいこの問題にまだ問題があります。 –

+0

;)私の答えが役に立ったら投票を受け入れることを忘れないでください。 –

+0

どのように$ this .....をエコーすることができますか:) –

関連する問題