11

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

これは機能しています:

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

問題は、LIKEが変化することです。そのため、スクリプトで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'%'");
4

2 に答える 2

20

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

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

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

于 2012-04-12T23:54:04.930 に答える
4

好きですか

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

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

于 2012-04-12T23:56:08.640 に答える