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

Я пытаюсь найти количество строк, соответствующих определенному шаблону. В этом примере все, что START с "123":

Это работает:

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

Проблема в том, что LIKE будет меняться, поэтому я пытаюсь определить его в script, а затем выполнить запрос, но это НЕ работает:

$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'%'");

Ответ 1

У вас синтаксис неправильный; нет необходимости размещать период внутри строки с двумя кавычками. Вместо этого он должен быть больше похож на

$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 знак процента должен быть удвоен, чтобы в итоге появиться один раз в результате.

Ответ 2

ДЕЙСТВИТЕЛЬНО

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

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