PHP-准备语句错误,什么';怎么了?
下面是代码块:PHP-准备语句错误,什么';怎么了?,php,prepared-statement,Php,Prepared Statement,下面是代码块: $query = "UPDATE users SET ?=? WHERE ?=?"; $type = "s"; $type .= substr(gettype($valname), 0, 1); $type .= 'i'; if ( $smtp = $this->conn->prepare($query) ) { $smtp->bind_p
$query = "UPDATE users SET ?=? WHERE ?=?";
$type = "s";
$type .= substr(gettype($valname), 0, 1);
$type .= 'i';
if ( $smtp = $this->conn->prepare($query) )
{
$smtp->bind_param($type, $colname, $valname, 'id', 40);
$smtp->execute();
$smtp->close();
}else
{
return $this->conn->error;
}
出于某种原因,它拒绝绑定参数,并导致以下错误:
您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在“?=”附近使用的正确语法?第1行的?=?'在哪里
如果在问号周围添加反勾(`)或单引号('),则会出现以下错误:
“where子句”中的未知列“?”
知道出了什么问题吗?我已经坐在这里玩了好几个小时了,天哪,真令人沮丧
非常感谢 我认为您不能在准备好的语句中动态定义列,只能在值中定义列,因为这些值是转义的等。您需要将列名放入$query字符串中,如果它来自未知源,请确保对其进行筛选和验证。我认为您不能在准备好的语句中动态定义列,仅值,因为这些值是转义的等。您需要将列名放入$query字符串中,如果它来自未知源,请确保对其进行筛选并验证。据我所知,您只能使用?条件的占位符,而不是表/字段名的占位符
请参阅:据我所知,您只能使用?条件的占位符,而不是表/字段名的占位符
看:啊,好的。您可能是对的,但我现在遇到了另一个错误:致命错误:无法在blablbla中通过引用传递参数3…,现在的查询是这样的:“UPDATE users SET$colname=?WHERE id=?”,看起来不错吧?我还从bind_param函数中删除了列名:($type,$valname,40)。明白了!我将ID移动到一个单独的字符串,然后将该字符串链接到函数中。似乎在工作!:)啊,好吧。您可能是对的,但我现在遇到了另一个错误:致命错误:无法在blablbla中通过引用传递参数3…,现在的查询是这样的:“UPDATE users SET$colname=?WHERE id=?”,看起来不错吧?我还从bind_param函数中删除了列名:($type,$valname,40)。明白了!我将ID移动到一个单独的字符串,然后将该字符串链接到函数中。似乎在工作!:)啊,好吧。您可能是对的,但我现在遇到了另一个错误:致命错误:无法在blablbla中通过引用传递参数3…,现在的查询是这样的:“UPDATE users SET$colname=?WHERE id=?”,看起来不错吧?我还从bind_param函数中删除了列名:($type,$valname,40)。您可能是对的,但我现在遇到了另一个错误:致命错误:无法在blablbla中通过引用传递参数3…,现在的查询是这样的:“UPDATE users SET$colname=?WHERE id=?”,看起来不错吧?我还从bind_param函数中删除了列名:($type,$valname,40)。