这个 Mysql PDO 执行有啥问题导致它无法执行?

Posted

技术标签:

【中文标题】这个 Mysql PDO 执行有啥问题导致它无法执行?【英文标题】:Whats wrong with this Mysql PDO execution that makes it not execute?这个 Mysql PDO 执行有什么问题导致它无法执行? 【发布时间】:2012-01-09 00:23:03 【问题描述】:

这个查询没有执行,我确信它会检查代码,它只是没有更新行。

$statement = $db->prepare("UPDATE users SET data=:data WHERE id=:id");
$statement->execute(array(':data' => $data, ':id' =>     $_REQUEST['user_id']));

可能是什么问题?我 100% 认为 $_REQUEST['user_id'] 是有效的并且存在于数据库中,并且该数据也包含一些内容。我真的不知道为什么它不会执行。

【问题讨论】:

我们怎么知道它为什么不执行?通常您会收到一条错误消息,如果没有,则检查您传递给execute 函数的参数。你有$data 并且你有$_REQUEST['user_id'] 被通过。除非您验证您的断言是正确的,否则说您确定某事是有效的是没有意义的——即两个变量都已设置。 我已经验证了两者都包含带有 isset 的东西,我的意思是说实话,我和你一样一无所知。没有给出错误,它只是跳过了这段代码,就像什么都没有!真的很奇怪。我的意思是,在脚本的顶部,我使用完全相同的代码,但在“SELECT”中接收用户数据,它确认有效: @N.B. $query = $db->prepare("SELECT * FROM users WHERE id=?"); $query->execute(array($_REQUEST['user_id'])); 您是否尝试过通过 $statement->errorInfo() 获取错误信息?如果有,上面写的是什么? 【参考方案1】:

先试试binding你的参数:

$statement = $db->prepare("UPDATE users SET data=:data WHERE id=:id");

$statement->bindValue(':data', $data, PDO::PARAM_STR);
$statement->bindValue(':id',  $_REQUEST['user_id'], PDO::PARAM_INT);

$statement->execute();

【讨论】:

以上是关于这个 Mysql PDO 执行有啥问题导致它无法执行?的主要内容,如果未能解决你的问题,请参考以下文章

php中的Mysqlnd、PDO和PDO_Mysql扩展有啥区别?

PHP PDO MySQL 以及它如何真正处理 MySQL 事务?

Pdo

在 PDO(使用 MySQL)中执行 INSERT 后获取最后插入的行?

PDO访问方式操作数据库

PDO / PHP / MySQL 中的性能:事务与直接执行