PHP/MySQL - 如何通过 PDO 使用 MySQL BEGIN/COMMIT

标签 php mysql pdo

我想知道如何将 MySQL BEGIN/COMMIT 与 PDO 一起使用。 我读到最好创建一个查询,要么插入所有数据,要么根本不插入数据,以在数据库中提供“一致性” 这是我的代码

$query = $db -> prepare 
                        ("
                        BEGIN;
                        INSERT INTO chat (chat_id,msg,datetime) 
                        VALUES (:cid,:msg,:datetime)
                        INSERT INTO chat_connect (chat_id,sender_id,receiver_id)
                        VALUES (:cid2,:sender_id,:receiver_id);
                        COMMIT;
                        ");
$query -> execute(array(
            "cid" => $cid,
            "msg" => $msg,
            "datetime" => $datetime,
            "sender_id" => $getid,
            "receiver_id" => $frid,
            "cid2" => $cid
            ));

最佳答案

您的代码可以工作 only if emulation mode is turned ON

否则,您必须像这样在单独的调用中运行查询。

$db->query("BEGIN");
$stmt = $db->prepare("INSERT INTO chat (chat_id,msg,datetime) VALUES (:cid,:msg,:datetime)");
$stmt->execute(...);
$stmt = $db->prepare("INSERT INTO chat_connect (chat_id,sender_id,receiver_id)
                        VALUES (:cid2,:sender_id,:receiver_id)");
$stmt->execute(...);
$db->query("COMMIT");

这是在 PHP 中运行多重查询语句的一般规则。

但是,在事务的情况下,您可以使用 their PDO counterparts 代替 SQL 命令 BEGINCOMMIT .

关于PHP/MySQL - 如何通过 PDO 使用 MySQL BEGIN/COMMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39991488/

相关文章:

php - MySQLI通过socket连接本地服务器错误

php - 包含 MySQL 内容的 Bootstrap 数据表

php - 检查数据库中是否存在电子邮件

php - 在 PostgreSQL 中使用 PDO 时如何忽略问号作为占位符

php - 如何检查 URL 是否存在 - 错误 404? (使用PHP)

php - Perl exec ('/usr/bin/php -v' ) 在 CentOS 6.6 上挂起,除非先关闭 STDIN

mysql - ORDER BY MySQL中的相等值

php - PDO::FETCH_CLASS 具有多个类

php - 为什么不能序列化 PDO 对象?

php - 显示来自 x cat 和 y tag 的帖子