Как использовать строку PHP в запросе mySQL LIKE?

Я пытаюсь найти количество строк, которые соответствуют определенному шаблону. В этом примере все, что 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%'"); 

Не забывайте, что % в конце