无法使用PHP/PDO在mySQL数据库上更新/插入


Unable to update/insert on mySQL DB using PHP/PDO

我在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报告成功,但数据库中什么也没有发生。我怎样才能知道问题出在哪里?

您已经关闭了自动提交,因此您需要显式地commit()所有事务。

您的查询是成功的(因此您看到的结果),它们只是从未提交。

如果你不想显式地提交每个请求,你需要删除这行代码:

$db->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE);