gpt4 book ai didi

php - 检查查询是否执行

转载 作者:行者123 更新时间:2023-11-29 02:21:59 26 4
gpt4 key购买 nike

我有这个使用 PDO 的 php 代码

$q = "START TRANSACTION;";
$q = "INSERT INTO `student` (`first_name`, `last_name`, `level`) VALUES ('Zac', 'Mark',2);";
$q.= " SET @lastId = (SELECT `id` FROM `student` ORDER BY `id` DESC LIMIT 1);";
$q .= " INSERT INTO `student_dep` (`stdnt_id`, `dep_id`) VALUES (@lastId, 2);";
$q .= " COMMIT;";
$db->query($q);
$check = $db->execute();
if($check){
echo "1";
}else{
echo "2";
}

现在这个查询不正确所以它应该返回 false;但它返回 true 并且不执行。如何查看是否执行?

最佳答案

您的代码无法运行,因为您在 PDO 对象上调用了 execute 方法。 PDOStatement 包含 execute 方法,所以我猜你在所有的复制粘贴过程中丢失了一些东西。我不会回答您的问题,而是会向您展示大多数人使用的正确做事方式。

1) 创建PDO对象并设置为异常模式

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try
{
$dbh = new PDO($dsn, $user, $password);
$dbh>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
}

2) 准备语句,开始事务,绑定(bind)值,执行

try
{
// Prepare the insert for student table
$student = $dbh->prepare("INSERT INTO `student` (`first_name`, `last_name`, `level`) VALUES (?, ?, ?)");

// Prepare the insert for student_dep table
$student_dep = $dbh->prepare("INSERT INTO `student_dep` (`stdnt_id`, `dep_id`) VALUES (?, ?)");

// Start the transaction
$dbh->beginTransaction();

// Create the record in student table
$student->execute(['Zac', 'Mark', 2]);

// Create the record ind student_dep table using the last insert id generated by previous insert
$student_dep->execute([$dbh->lastInsertId(), 2]);

// Commit both inserts
$dbh->commit();
}
catch(PDOException $e)
{
// If there was an active transaction, roll back
if($dbh->inTransaction())
{
$dbh->rollBack();
}
}

如果任何事情发生在任何时候,您将收到一个异常(exception)。在异常中,您可以执行所需的操作,例如报告、回滚、清理等。这是执行这些操作的正确方法。

关于php - 检查查询是否执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30210927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com