PDO MySQL错误-SQLSTATE[42000]:通过将整数更新到表

PDO MySQL错误-SQLSTATE[42000]:通过将整数更新到表,mysql,pdo,php,Mysql,Pdo,Php,我可以使用PDO将文本字符串varchar类型更新到Mysql数据库,而不会出现任何问题。但是对于integer int11类型,我的PDO语句有一些大问题,并且不能将整数值写入数据库 在这里,您可以看到我通过输入整数值进行更新得到的错误消息: ERRNO:42000 ERROR:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行的'age='800'附近使用的正确语法,其中id='1 我从$\u POST获得

我可以使用PDO将文本字符串varchar类型更新到Mysql数据库,而不会出现任何问题。但是对于integer int11类型,我的PDO语句有一些大问题,并且不能将整数值写入数据库

在这里,您可以看到我通过输入整数值进行更新得到的错误消息:

ERRNO:42000 ERROR:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行的'age='800'附近使用的正确语法,其中id='1

我从$\u POST获得如下值:

foreach ($_POST['changed'] as $SubArray) {
    foreach ($SubArray as $key => $value) {
        if ($key === 'recid') continue;


        $sql  = "UPDATE clients SET $key = :value WHERE id = :recid";

        $STH = $DBH->prepare($sql);

        try {

            $STH->execute(array(':value' => $value, ':recid' => $SubArray['recid']));

        } catch (PDOException $e) {
            $code = $e->getCode();
            $file = $e->getFile();
            $line = $e->getLine();
            $msg  = $e->getMessage();
            echo "$file:$line ERRNO:$code ERROR:$msg";
        }
    }
}

echo urlencode$sql=>UPDATE+clients+SET+age+%3D+%3Avalue+WHERE+id+%3D+%3Arecid

像这样设置查询$sql就可以了

$sql = "UPDATE `clients` SET `$key` = :value WHERE id = :recid";
表和列名前后使用反勾号

`


是否确保数据库中列的类型设置为整数?是否按照错误消息的建议执行了操作?您是否查阅了服务器版本的Mysql手册?你发现了什么?语法错误与绑定无关。这是查询的问题。把你的问题回传出来进行目视检查怎么样?等等。那是什么?我指的是真正的$sql变量。更好的urlencode-d可以显示所有可能的不可打印字符。您的列名中似乎有一个是保留字。查看保留的单词。为了获得最大的兼容性,您应该始终在backticks中包装MySQL表和列名,其他引擎对此有自己的机制。注意:由于您尚未更新PHP代码示例,我们无法查看您如何/在何处记录$sql,因此无法保证您记录了实际崩溃的查询。