我在PHP中使用PDO在数据库上进行更新和插入时遇到了麻烦。错误代码表示成功,但预期的更改未反映在数据库中。
这是我建立连接的地方:
$dsn = "mysql:host=".DB_HOST.";dbname=".DB_NAME;
$db = new PDO($dsn, DB_USER, DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE);
我可以很好地连接和选择事物,但它根本不会更新或插入。我尝试过使用硬编码的字符串,但即使这样也行不通。这是代码:
$ins = "insert into choice_history (id_choice_history,choice_num,choice_taken) values ( 0, 10, 28);";
if($stmt = $this->_db->prepare($ins))
{
$status = $stmt->execute();
return $errorcode = $stmt->errorCode();
}
我有一个类似的更新字符串,但它们都有相同的结果。
表定义(没有约束):
mysql> describe choice_history;
+-------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| id_choice_history | int(11) | NO | | NULL | |
| choice_taken | int(11) | YES | | NULL | |
| choice_num | int(11) | YES | | NULL | |
+-------------------+---------+------+-----+---------+----------------+
此错误代码始终为00000(成功)。我也尝试用相同的字符串调用exec(),但没有骰子。我可以将该查询粘贴到我的服务器上的mysql中并且执行正常,但是从PDO没有任何反应。
此时我不知所措。 PDO报告成功,但数据库中没有任何反应。我怎样才能找出问题所在?
答案 0 :(得分:2)
您已关闭自动提交功能,因此您需要明确commit()
所有交易。
您的查询成功(因此您看到的结果),它们永远不会被提交。
如果您不想显式提交每个请求,则需要删除以下代码:
$db->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE);