Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何判断PDO是否找到与我的更新查询匹配的项,以及是否已更新?_Php_Mysql_Pdo - Fatal编程技术网

Php 如何判断PDO是否找到与我的更新查询匹配的项,以及是否已更新?

Php 如何判断PDO是否找到与我的更新查询匹配的项,以及是否已更新?,php,mysql,pdo,Php,Mysql,Pdo,实际上,所有这些问题都是关于pdo::rowCount,因为我需要知道与查询匹配的是: 1.已找到,但无需更新(匹配值) 2.找到并更新 3.根本找不到(未更新) 我正在寻找一种方法,用PHP说出以下三个选项之一: 返回实际更改的行数。C API函数返回匹配和更新的行数以及在更新过程中发生的警告数 特别是,在更新后查询返回。发出命令后立即显示此类信息。例如: mysql>更新用户集name='john',其中ID=54; 查询正常,0行受影响(0.00秒) 匹配的行:1已更改:0警告:0 通过提

实际上,所有这些问题都是关于
pdo::rowCount
,因为我需要知道与查询匹配的是:
1.已找到,但无需更新(匹配值)
2.找到并更新
3.根本找不到(未更新)

我正在寻找一种方法,用PHP说出以下三个选项之一:

返回实际更改的行数。C API函数返回匹配和更新的行数以及在更新过程中发生的警告数

特别是,在
更新后
查询返回。发出命令后立即显示此类信息。例如:

mysql>更新用户集name='john',其中ID=54;
查询正常,0行受影响(0.00秒)
匹配的行:1已更改:0警告:0
通过提供对该功能的直接访问。即使是通过其自身功能提供的访问

不幸的是,PDO不提供对该函数的访问——对代码库的搜索确认它从不调用

或者,客户端可以设置连接标志,然后返回匹配的行数,而不是更改的行数。PDO通过特定于驱动程序的属性提供设置此连接标志的访问

但是,此连接标志对您没有多大用处,因为它不是无法区分“根本找不到”和“找到但没有更新”,而是无法区分“找到但没有更新”和“找到并更新”


因此,正如其他人已经建议的那样,在这种情况下,您唯一的选择是执行一个单独的
SELECT
查询来区分可能的条件。为了避免种族危险,您应该小心地在同一事务中执行
SELECT
,并在更新之前使用if读取。

我不确定您的实际问题是什么。PHP手册关于
PDO::rowCount
PDOStatement::rowCount()返回受DELETE、INSERT、,或者UPDATE语句。
当更新具有相同值的Mysql表时,有一条注释说
,实际上没有任何影响,所以rowCount将返回0。正如下面的Perl先生所指出的,这并不总是首选的行为,您可以在PHP 5.3之后自行更改它。
,因此对我来说,它似乎只返回找到的和更新的行的行数。这就是问题所在,您如何判断这是3还是1?好的,方法是2。如果您想要其中一个,则需要执行SELECT语句并计算行数。只需在更新之前使用相同的ID执行SELECT查询,如果它返回ant row,则无需更新,如果需要,则只需使用ID更新它
UPDATE users SET 'name'='john' WHERE users.ID = 54;