PHP:PDO rowCount() 有时会返回 0?

标签 php mysql pdo

<分区>

我正在使用 here 中描述的神奇的 last_insert_id 技巧, 但现在遇到了非确定性行为的问题。

PHP 代码大约每隔我运行一次就运行一次。这是在一个完全空闲的系统上(没有同时运行的生产)。

我在这里忘记了什么吗?可能是什么问题?

我的 PHP 代码:

$query = "UPDATE `session` 
                SET `date_access` = NOW(), someField = LAST_INSERT_ID(someField) 
                WHERE ID = :cookie LIMIT 1 ;";
    $stmt = $dbh->prepare($query);
    $stmt->bindParam(':cookie', $_COOKIE['x']);
    if ($stmt->execute()) {
        $count = $stmt->rowCount();
        if ($count == 1) {
            $result = $dbh->lastInsertId();
        } 
    }

代码每次都使用现有的“cookie”值运行,但每次代码运行时 $count 都是 0(而不是 1)。

这是表格:

            SET NAMES utf8;
            SET time_zone = '+00:00';
            SET foreign_key_checks = 0;
            SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

            SET NAMES utf8mb4;

            DROP TABLE IF EXISTS `session`;
            CREATE TABLE `session` (
              `ID` char(50) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
              `date_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
              `date_access` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
              `someField` bigint(20) unsigned NOT NULL,
              UNIQUE KEY `ID` (`ID`),
              KEY `someField` (`someField`),
              CONSTRAINT `session_ibfk_2` FOREIGN KEY (`someTable`) REFERENCES `someTable` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

最佳答案

https://dev.mysql.com/doc/refman/5.7/en/mysql-affected-rows.html说:

For UPDATE statements, the affected-rows value by default is the number of rows actually changed.

换句话说,如果您更新但您设置的值已经是存储在匹配行中的值,则它不算作受影响的行。

这是默认行为,但如果您在连接时设置 PDO 属性,则可以更改此行为。参见 PHP, MySQL - can you distinguish between rows matched and rows affected?

关于PHP:PDO rowCount() 有时会返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48038938/

相关文章:

PHP post ID 下拉语句不是值

PHP 脚本 - 创建表,然后将 CSV 导入 MySQL - 不起作用

mysql - 比较使用 CASE 和 USER VARIABLES

php - 帮助查找此 MySQL 页面中的安全漏洞?

php - Doctrine countDistinct 别名

PHP从KML文件获取坐标

php - 防止在 PHP 中的高级 MySQL 存储过程语句中注入(inject)

mysql - 为一个变量查询同一个表中的多行

php - 不带变量的 pdo 插入

php - 如何跨多个类访问PDO连接对象?[php +Mysql]