gpt4 book ai didi

PHP PDO MySQL 在没有行受到影响时检查更新查询是否成功的正确方法

转载 作者:可可西里 更新时间:2023-11-01 07:02:03 25 4
gpt4 key购买 nike

当使用 php pdo 和 mysql 时,判断更新查询是否成功的可靠方法是什么?

在我的应用中,我更新了除用户之外提交的项目的总数,表格如下所示:

项目

userId | itemsAdded | itemsChecked | itemsUnChecked | itemsTotal
1 | 5 | 2 | 3 | 5

因此,当我执行 update items set itemTotals = itemsChecked+itemUnChecked 时,itemsTotal 列保持不变,除非 itemsAdded 更改并且 itemsUnChecked 递增(2 + 3 等于 5, 1 + 4 也是 5)。

我曾经使用 rowCount() 来检查查询是否成功,但在这种情况下,由于 itemsTotal 列保持不变,因此无法判断 sql 是否成功。

$query = $conn->prepare($sql);

$query->execute(array(

":itemCount" => $itemCount
":itemId" => $itemId
));

$queryCount = $query->rowCount();

if($queryCount == 1) {
echo 'Updated succeeded';
} else {
echo 'Updated failed!';
}

我还可以使用:

$query = $conn->prepare($sql);

$result = $query->execute(array(

":itemCount" => $itemCount
":itemId" => $itemId
));

if($result) {
echo 'Updated succeeded';
} else {
echo 'Updated failed!';
}

但是,根据查询是否成功或根据更新的行数返回 true 还是 false?

我只需要检查查询是否成功。无需告知已更新的行数。

最佳答案

当 SQL 语句执行失败时,execute() 方法将抛出异常或返回 FALSE(取决于您为数据库连接设置的错误模式)。

如果我们将错误模式设置为在执行语句之前抛出异常,(通常是在建立数据库连接之后),就像这样

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

然后我们可以使用 try/catch block 来处理 SQL 语句抛出的异常。像这样:

try {
$query->execute(...);
echo 'Update succeeded';

} catch(PDOException $e) {
echo 'Update failed!';
echo 'Error: ' . $e->getMessage();
}

有关错误模式设置和处理的信息可在此处的文档中找到:http://php.net/manual/en/pdo.error-handling.php


或者,如果 PDO 未设置为抛出异常,我们可以使用简单的 if 测试。 (如果语句失败,execute() 方法将返回 FALSE。)

if ($query->execute(...)) {
echo 'Update succeeded';

} else {
echo 'Update failed!';

}

为了更精确地控制不同类型的失败,我们可以使用errorCode() 方法来检索语句句柄上最后一次操作关联的SQLSTATE,我们可以对语句句柄进行条件测试返回值。 http://php.net/manual/en/pdostatement.errorcode.php

关于PHP PDO MySQL 在没有行受到影响时检查更新查询是否成功的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25167835/

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