PHP - 准备好的语句错误,有什么问题?

时间:2010-09-02 15:53:27

标签: 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_param($type, $colname, $valname, 'id', 40);
            $smtp->execute();
            $smtp->close();

        }else
        {
            return $this->conn->error;

        }

由于某种原因,它拒绝绑定参数,它给了我这个错误:     您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'?=附近使用正确的语法?在哪里?=?'在第1行

如果我在问号周围添加反引号(`)或单引号('),我会收到此错误:

未知栏'?'在'where子句'

任何想法出了什么问题?我一直坐在这里几个小时玩它,上帝,这是令人沮丧的!

非常感谢!

2 个答案:

答案 0 :(得分:3)

据我所知,你只能使用?条件的占位符,而不是表/字段名称。

请参阅:http://php.net/manual/en/pdo.prepared-statements.php

答案 1 :(得分:2)

我认为您不能在预准备语句中动态定义列,只能在这些值中进行转义等等。您需要将列名放在$ query字符串中,如果它来自未知来源请确保你过滤它并验证它。