web-dev-qa-db-ja.com

DBクエリはLIKE演算子内の%sを置き換えます

次のようなクエリがあります。

db_query("SELECT * FROM {foo} WHERE bar LIKE '%supply%' LIMIT %d,%d", 0, 10)

ここで_db_query_ APIを使用すると、_%s_が指定された引数に置き換えられ、結果のクエリは次のようになります

_SELECT * FROM foo WHERE bar LIKE '0upply%' LIMIT 0, 0_

これを克服するためのアイデアはありますか? mysql_query()を使いたくない

一時的に使用しています_db_query()

3
GoodSp33d

Drupal dbクエリで%記号を別の%記号でエスケープする必要があるだけです。

db_query("SELECT * FROM {foo} WHERE bar LIKE '%%supply%%' LIMIT %d,%d", 0, 10);

プレースホルダーを使用したい場合は、次のようになります。

db_query("SELECT * FROM {foo} WHERE bar LIKE '%%%s%%' LIMIT %d,%d", 'supply', 0, 10);
5
Clive

私は遅刻して答えますが、それは別の人に役立つかもしれません。

LIKE条件を文字列プレースホルダーとして設定し、その値を引数として関数deb_query()に渡すだけです。

db_query("SELECT * FROM {foo} WHERE bar LIKE '%s' LIMIT %d, %d", '%supply%', 0, 10);
3
piouPiouM