如何取得前一次MySql操作所影响的行数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何取得前一次MySql操作所影响的行数相关的知识,希望对你有一定的参考价值。

参考技术A 本扩展自
php
5.5.0
起已废弃,并在将来会被移除。应使用
mysqli

PDO_MySQL
扩展来替换之。参见
MySQL:选择
API
指南以及相关
FAQ
以获取更多信息。用以替代本函数的有:
mysqli_affected_rows()
PDOStatement::rowCount()
说明
int
mysql_affected_rows
([
resource
$link_identifier
=
NULL
]
)
取得最近一次与
link_identifier
关联的
INSERT,UPDATE

DELETE
查询所影响的记录行数。
参数
link_identifier
MySQL
连接。如不指定连接标识,则使用由
mysql_connect()
最近打开的连接。如果没有找到该连接,会尝试不带参数调用
mysql_connect()
来创建。如没有找到连接或无法建立连接,则会生成
E_WARNING
级别的错误。
返回值
执行成功则返回受影响的行的数目,如果最近一次查询失败的话,函数返回
-1。
如果最近一次操作是没有任何条件(WHERE)的
DELETE
查询,在表中所有的记录都会被删除,但本函数返回值在
4.1.2
版之前都为
0。
当使用
UPDATE
查询,MySQL
不会将原值和新值一样的列更新。这样使得
mysql_affected_rows()
函数返回值不一定就是查询条件所符合的记录数,只有真正被修改的记录数才会被返回。
REPLACE
语句首先删除具有相同主键的记录,然后插入一个新记录。本函数返回的是被删除的记录数加上被插入的记录数。
"INSERT
...
ON
DUPLICATE
KEY
UPDATE"
这种情况的查询,当执行了一次
INSERT
返回的值会是
1;如果是对已经存在的记录执行一次
UPDATE
将返回
2。

如何在 WordPress 查询中获得受影响的行数?

【中文标题】如何在 WordPress 查询中获得受影响的行数?【英文标题】:How to get affected row count on WordPress query? 【发布时间】:2018-06-10 15:20:50 【问题描述】:

此代码用于 WordPress 插件。

以下是我用来将数据从 CSV 文件插入数据库的代码:

$sql="LOAD DATA LOCAL INFILE '".$fileurl."' INTO TABLE ".$table_name."
                FIELDS TERMINATED BY ','
                LINES TERMINATED BY '\r\n' IGNORE 1 LINES (`first_name`,`last_name`, `email`, `mobile_phone`, `address_1`, `address_2`, `city`, `state`, `zip`, `about_us` );
                ";
                $query = $wpdb->query($sql);

当我这样做var_dump($query); 时,它显示int(0),并且数据已成功插入表中。我的问题是如何获取插入的行数?

【问题讨论】:

您使用的是哪个数据库? 【参考方案1】:

您可以使用以下方法在查询中找到受影响的行。

$count = $wpdb->query($sql);

$count 是您受影响的行。

【讨论】:

问题是wordpress代码,我用的是mysql @PriME 检查我的编辑。在您的代码中,不需要 var_dump。 你测试了吗? 你测试了吗? @PriME 请正确阅读问题,$count = $wpdb->query($sql);在此代码$count输出int(0)【参考方案2】:

我知道这是一个非常老的问题,也许这个答案很明显,但是希望它对像我一样偶然发现它的人有用。

在这种使用 LOAD DATA 的特殊情况下,一种选择可能是在 LOAD DATA 之前和之后简单地运行一个 sql COUNT(),然后取差:

$count_before = $wpdb->query("SELECT COUNT(*) FROM $table_name");
// LOAD DATA ...
$count_after = $wpdb->query("SELECT COUNT(*) FROM $table_name");
$new_rows = $count_after - $count_before;

我知道如果桌子上有其他同时进行的活动,这可能无法正常工作;尽管您可以锁定表以防止冲突更新并使 LOAD DATA 更​​快。您也许可以使用 $wpdb->affected_rows 来获得它,这也值得检查。

毫无疑问,自从你问这个问题已经 2 年前,你还有许多其他可行的解决方案;希望这对任何在这里搜索解决方案的人有用。

【讨论】:

【参考方案3】:

对象$wpdb 包含很多有用的东西。你可以通过转储这个对象来查看公共属性。

其中一个就是您搜索的内容:

echo $wpdb->affected_rows;

【讨论】:

如果我查看代码wp-includes/wp-db.phpfunction query( $query ),属性似乎是rows_affected。 developer.wordpress.org/reference/classes/wpdb/query【参考方案4】:

您无法使用带有wpdb::query()LOAD DATA 语句获取此信息。它不理解该语句,因此不会自动获取受影响的行数。你自己也拿不到,因为必要的wpdb 类属性(use_mysqlidbh)不是public

【讨论】:

以上是关于如何取得前一次MySql操作所影响的行数的主要内容,如果未能解决你的问题,请参考以下文章

MySql取得日期(前一天某一天)

PHP判断sql语句是不是执行成功

如何获取受 SQL Alchemy 影响的行数?

如何取出label显示的文字的行数

MySQL重复键更新+受影响的行数

mysqli