UPDATE users SET 'name'='john' WHERE users.ID = 54;
实际上,所有这些问题都是关于pdo::rowCount
的,因为我需要知道与查询匹配的是:
1.已找到,但无需更新(匹配值(
2.找到并更新
3.根本找不到,(未更新(
我正在寻找一种方法来告诉PHP这三个选项之一
如UPDATE语法下所述:
UPDATE
返回实际更改的行数。mysql_info()
C API函数返回匹配和更新的行数以及在UPDATE
期间发生的警告数。
特别地,在UPDATE
查询之后,mysql_info()
返回ER_UPDATE_INFO
。MySQL命令行工具在发出命令后立即显示这些信息。例如:
mysql> UPDATE users SET name='john' WHERE ID=54;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
MySQLi通过mysqli::$info
提供对该函数的直接访问。甚至原始MySQL API也通过自己的mysql_info()
函数提供了对其的访问。
不幸的是,PDO无法访问此函数——对代码库的搜索确认它从未调用mysql_info()
。
或者,客户端可以设置CLIENT_FOUND_ROWS
连接标志,然后UPDATE
将返回匹配的行数,而不是更改的行数。PDO确实通过PDO::MYSQL_ATTR_FOUND_ROWS
驱动程序特定属性提供了设置此连接标志的访问权限。
然而,此连接标志对您没有什么用处,因为它不会区分"根本找不到"answers"找到但没有更新",而是会使您无法区分"找到但没有升级》和"找到并更新。
因此,正如其他人已经建议的那样,在这种情况下,您唯一的选择是执行单独的SELECT
查询来区分可能的条件。为了避免竞争危险,您应该小心在同一事务中执行SELECT
,并在更新前使用锁定读取。