Я думал, что добавлю предложение, похожее на первую строку следующего, в подготовленный оператор в PHP для запуска в MySQL:
$sql .= " where ? like '%'+name+'%' ";
if ($stmt = mysqli_prepare($con, $sql)) {
//irrelevant code omitted here.
} else {
echo("Error description: " . mysqli_error($con));
}
где имя столбца в таблице и? это параметр для привязки.
Я получаю эту ошибку:
У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ‘+ name +’% ‘в строке 1
Если я заменю ?
с помощью ‘fred’ и запустите его в MySQL. это будет работать. Точно так же это работает, если я просто удаляю конкатенацию, чтобы она запускалась $sql .= " where ? like name ";
Однако, если я просто изменю это так:
? like ('%'+name+'%')
тогда это бежит. Кто-нибудь знает почему, пожалуйста? Я спрашиваю, потому что чувствую, что здесь есть что понять, и я не понимаю этого. В частности, я хотел бы знать, есть ли другие сценарии, в которых мне придется добавлять произвольные скобки при использовании подготовленных операторов?
использование CONCAT(str1,str2,...)
объединить:
$sql .= " where ? like CONCAT('%', name, '%')";
+
— это оператор сложения чисел в MySQL, см .: http://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_plus
На самом деле я думаю, что так и должно быть:
$sql .= " where ? like '%name%'";