为什么计算n#39需要括号;比如'预备陈述中的条款?

时间:2014-10-04 20:07:04

标签: php mysql prepared-statement sql-like

我认为我会在PHP中使用PHP中的预准备语句添加类似于以下第一行的子句:

$sql .= " where ? like '%'+name+'%' ";

if ($stmt = mysqli_prepare($con, $sql)) {    
//irrelevant code omitted here.
} else {
    echo("Error description: " . mysqli_error($con));
}

其中name是表中的一列?是一个要绑定的参数。

我收到此错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在' + name +'%'附近使用在第1行

如果我将?替换为' fred'并在MySQL工作台中运行它将运行。同样,如果我只删除连接以便它启动$sql .= " where ? like name ";

,它就可以工作

但是,如果我只是改变它:

? like ('%'+name+'%')

然后它运行。谁知道为什么请?我问,因为我觉得这里有一些东西要理解,而我却没有得到它。特别是我想知道在使用预准备语句时是否还有其他情况我必须添加任意括号?

2 个答案:

答案 0 :(得分:3)

使用CONCAT(str1,str2,...)连接:

$sql .= " where ? like CONCAT('%', name, '%')";

+ - 是MySQL中数字的加法运算符,请参阅:http://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_plus

答案 1 :(得分:-1)

其实我应该这样:

$sql .= " where ? like '%name%'";