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)。