gpt4 book ai didi

php - PDO 事务中的意外结果

转载 作者:行者123 更新时间:2023-11-30 22:27:25 25 4
gpt4 key购买 nike

我的问题有点简单,或者这可能是我犯的一个愚蠢的错误。但我不知道我只是在 php 中使用 PDO 时得到了意想不到的结果。

代码是这样的,

try
{
$_pdo = get_pdo_instance();

$_pdo->beginTransaction();

//query 1
$_pdo->query("some query"); // I have error in query 3 but this query 1 is still executed.

//query 2
$_pdo->query("some query"); // only executes when there are no errors.

//query 3
$_pdo->query("some wrong query"); // let's say I have an error in this sql

$_pdo->commit();

}
catch(Exception $ex)
{
$_pdo->rollback();
}

我现在正在解释这个问题,在给定的示例中,我在 query 3 中有一些 sql 错误,因此不应运行任何查询,因为它们都属于单个事务。

但在我的例子中,即使 try block 中存在错误,query 1 也会始终运行。

也许这很简单,但我不知道为什么会这样。

编辑:函数定义,

function get_pdo_instance()
{
try
{
$conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
die('ERROR: ' . $e->getMessage());
}

return $conn;
}

最佳答案

异常仅用于 PHP 错误。在上面的代码中,您试图捕获 MySQL 错误。当 PHP 读取您的 try block 时,一切看起来都很好,因此它不会捕获异常。您可以使用 PDO 和 MySQL 进行错误检查,例如:

if(!$_pdo->query("some query")) {
// Do something
}

关于php - PDO 事务中的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817266/

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