这个 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 事务?