gpt4 book ai didi

php - pdo rowCount() 在成功更新多行时提供零值

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

我正在使用以下查询更新 mysql 数据库中的多条记录。

$conn->beginTransaction();
try {
$stmt = $conn->prepare('UPDATE products
SET `stock_status`=:stockstatus,
`price`=:price WHERE `id`=:id');
foreach ($data as $v){
$stmt->bindParam(':stockstatus', $v['instock'], PDO::PARAM_STR);
$stmt->bindParam(':price', $v['Price'], PDO::PARAM_INT);
$stmt->bindParam(':id', $v['ID'], PDO::PARAM_STR);
$stmt->execute();
}//end foreach
$conn->commit();
} catch (PDOException $e) {
$conn->rollBack(); //roll back changes, if error
echo 'Update failed: ' . $e->getMessage();
exit;
}
$count = $stmt->rowCount();
//$count = $stmt->rowCount();
echo "$count records updated.";
$stmt->closeCursor();
$conn = NULL;

rowCount() 在多行更新时始终生成 0。为什么会这样??

来自 PDO 手册:rowCount() 返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。

但是 rowCount() 没有显示多次更新中更新的总行数?如何显示更新的总行数

更新:

我还尝试添加 PDO::MYSQL_ATTR_FOUND_ROWS 作为 mysql 连接属性,如下所示:

    <?php
$attr = array(
PDO::MYSQL_ATTR_FOUND_ROWS => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);
conn = new PDO($dsn,$user,$pass,$attr);
?>

但是多行更新仍然返回0 条更新记录。我已经验证该行确实更新了。

根据我的理解,“如果 MYSQL_ATTR_FOUND_ROWS 打开,rowCount() 返回找到的行数而不是更改的行数”。

那么,如何解决显示更新的总记录???

最佳答案

问题在于如何实例化 PDO 连接对象。您将无法准确计数 UPDATE key 已经存在的情况下的操作。 rowCount()将始终返回 0。

您需要更改创建 PDO 对象的行 $conn包括一个附加选项 referenced here在 PHP 网站的评论中指出:。

When updating a Mysql table with identical values nothing's really affected so rowCount will return 0. As Mr. Perl below noted this is not always preferred behaviour and you can change it yourself since PHP 5.3.

Just create your PDO object with <?php $p = new PDO($dsn, $u, $p,
array(PDO::MYSQL_ATTR_FOUND_ROWS => true)); ?>
and rowCount() will tell you how many rows your update-query actually found/matched.

根据该评论中的示例,它看起来像这样:

<?php
$conn = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
?>

该选项记录在此处:http://php.net//manual/en/ref.pdo-mysql.php

关于php - pdo rowCount() 在成功更新多行时提供零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310200/

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