当前位置:编程学习 > php >>

php 使用PDO管理事务


事务是一组数据库操作,其中所有的操作必须全部成功或全部撤销。在MySQL中,可以使用PDO和mysql扩展程序来管理事务。以下是如何使用PDO管理事务的步骤:

配置PDO连接:
try {
    pdo = new PDO('mysql:host=localhost;dbname=mydatabase', 'username', 'password');pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException e) {
    echo 'Connection failed: ' .e->getMessage();
}
PHP
开始事务:
try {
    pdo->beginTransaction();
} catch (PDOExceptione) {
    echo 'Begin transaction failed: ' . $e->getMessage();
}
PHP
执行数据库操作:
try {
    stmt =pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
    stmt->execute(['name' => 'John Doe', 'email' => 'johndoe@example.com']);
} catch (PDOExceptione) {
    pdo->rollback();
    echo 'Insert failed: ' .e->getMessage();
}
PHP
提交或回滚事务:
try {
    pdo->commit();
    echo 'Transaction committed.';
} catch (PDOExceptione) {
    pdo->rollback();
    echo 'Transaction rolled back.';
    echoe->getMessage();

}


PHP
使用mysql扩展程序管理事务
使用mysql扩展程序来管理事务的步骤跟PDO很相似。

配置mysql连接:
$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');
if ($mysqli->connect_errno) {
    echo 'Connection failed: ' . $mysqli->connect_error;

}


PHP
开始事务:
if (!$mysqli->autocommit(FALSE)) {
    echo 'Begin transaction failed.';

}


PHP
执行数据库操作:
if (!mysqli->query("INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com')")) {mysqli->rollback();
    echo 'Insert failed: ' . $mysqli->error;

}


PHP
提交或回滚事务:
if (!mysqli->commit()) {mysqli->rollback();
    echo 'Transaction rolled back.';

}


PHP
使用PDO和mysql扩展程序锁定表
表锁定是指在访问某个表时禁止其他会话对该表进行修改和读取。在MySQL中,可以使用PDO和mysql扩展程序来锁定表。

共享锁
共享锁用于防止其他会话对一个表进行写操作,但允许其他会话对该表进行读取。以下是如何使用PDO和mysql扩展程序进行共享锁的示例:

// PDO
stmt =pdo->prepare('SELECT name FROM users WHERE id = ? LOCK IN SHARE MODE');
stmt->execute([1]);

// mysqlresult = $mysqli->query('SELECT name FROM users WHERE id = 1 LOCK IN SHARE MODE');
PHP
排他锁
排他锁用于防止其他会话对一个表进行读取和写操作。以下是如何使用PDO和mysql扩展程序进行排他锁的示例:

// PDO
stmt =pdo->prepare('SELECT name FROM users WHERE id = ? FOR UPDATE');
stmt->execute([1]);

// mysqlresult = $mysqli->query('SELECT name FROM users WHERE id = 1 FOR UPDATE');

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,