web-dev-qa-db-ja.com

mySQL LIKEクエリでPHP stringを使用するには?

特定のパターンに一致する行の数を見つけようとしています。この例では、すべてが「123」で始まります。

これは機能しています:

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '123%'");
$count = mysql_num_rows($query);

問題は、LIKEが変わるため、スクリプトで定義してからクエリを実行しようとしていますが、これは機能していません。

$prefix = "123";
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix.'%'");
$count = mysql_num_rows($query);

2番目の例でこのクエリを適切に機能させるにはどうすればよいですか?

編集:私もピリオドなしで試してみました(また動作しません):

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix'%'");
11
JROB

構文が間違っています。二重引用符で囲まれた文字列内にピリオドを配置する必要はありません。代わりに、もっと似ているはずです

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$prefix%'");

これを確認するには、文字列を印刷して、最初のケースと同じであることがわかります。

もちろん、SQLインジェクションの危険性があるため、このようなクエリ文字列に変数を単純に挿入するのは良いアイデアではありませんです。少なくとも、mysql_real_escape_stringを使用して変数の内容を手動でエスケープする必要があります。これにより、おそらく次のようになります。

$sql = sprintf("SELECT * FROM table WHERE the_number LIKE '%s%%'",
               mysql_real_escape_string($prefix));
$query = mysql_query($sql);

sprintfの最初の引数内では、結果に1回現れるようにパーセント記号を2倍にする必要があることに注意してください。

18
Jon

好きですか

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$yourPHPVAR%'");

最後に%を忘れないでください

3
Starx