Я пытаюсь найти количество строк, которые соответствуют определенному шаблону. В этом примере все, что START с «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);
Как я могу заставить этот запрос работать правильно во втором примере?
EDIT: Я тоже пробовал это без периода (также не работает):
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix'%'");
У вас синтаксис неправильный; нет необходимости размещать период внутри строки с двумя кавычками. Вместо этого это должно быть больше похоже на
$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
знак процента должен быть удвоен, чтобы в итоге появиться один раз в результате.
Сделать это
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$yourPHPVAR%'");
Не забывайте, что %
в конце