gpt4 book ai didi

php - 使用 PHP PDO、rowCount 的异常行为和捕获异常

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

在使用 PHP/PDO 并执行 INSERT 时,我遇到了一些异常行为。这是一些示例代码:

foreach ($all_users as $this_user) {
try {
$stmt = $db->prepare('INSERT INTO fav_colors (name, color, whattime) VALUES (:name, :color, :whattime)');
$stmt->bindValue(':name', $this_user[name]);
$stmt->bindValue(':color', $this_user[color]);
$stmt->bindValue(':whattime', $this_user[time]);
$stmt->execute();
$count = $stmt->rowCount();
} catch(PDOException $e) { catchMySQLerror($e->getMessage()); }

if ($count == 1) {
echo "Successful write to table";
} elseif ($count == 0) {
echo "ERROR writing row to table";
}

}

假设我有 10 个名称/颜色要插入,时间为 DATETIME 格式 (2016-01-01 12:00:00)。我对此代码有一个循环,在代码之后我检查 $count 以查看插入是否正常。

这是我的问题。 10 次插入之一,无论出于何种原因 $write_time 为空。 mySQL 生成错误(不能为空)。我的自定义函数 catchMySQLerror 将错误写入表并通过电子邮件发送给我。确实如此,但该条目的 $count 仍然为 1,并且根据它,即使没有插入记录,一切都很好。

那么我在这里使用的 try/catch 来捕获异常是否有问题?如何添加一些可以更好地处理代码中错误的内容?我知道我可以在 catchMySQLerror 行之后添加更多行并以这种方式处理错误。这就是我所做的。但我想使用 if/else 来处理错误,并且使用我刚才提到的方法,我只能处理错误...而不能在成功时处理。

更新:我编辑了代码以显示我如何使用 $count

最佳答案

如果 ->execute() 抛出异常,则 $count = $stmt->rowCount(); 不会执行,因此 $count 保留上一次迭代(如果有的话)。
如果您依赖该值,则必须在每次迭代开始时(重新)初始化它。

关于php - 使用 PHP PDO、rowCount 的异常行为和捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35707537/

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