我想在 PHP 中的准备好的语句中添加一个类似于以下第一行的子句,以便在 MySQL 中运行:
$sql .= " where ? like '%'+name+'%' ";
if ($stmt = mysqli_prepare($con, $sql)) {
//irrelevant code omitted here.
} else {
echo("Error description: " . mysqli_error($con));
}
其中 name 是表中的列,而 ?是要绑定(bind)的参数。
我收到此错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+name+'%' at line 1
如果我将 ?
替换为“fred”并在 MySQL 工作台中运行它它将运行。同样,如果我只是删除串联以便它开始 $sql .= "where ? like name ";
但是如果我像这样改变它:
? like ('%'+name+'%')
然后它就运行了。请问有人知道为什么吗?我问是因为我觉得这里有一些东西需要理解,但我不明白。我特别想知道在使用准备好的语句时是否有其他情况需要添加任意括号?
最佳答案
$sql .= " where ? like CONCAT('%', name, '%')";
+
- 是 MySQL 中数字的加法运算符,请参阅:http://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_plus
关于php - 为什么准备好的语句中的计算 'like' 子句需要括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26196703/