gpt4 book ai didi

PHP,MySQL - 你能区分匹配的行和受影响的行吗?

转载 作者:IT王子 更新时间:2023-10-29 00:31:22 26 4
gpt4 key购买 nike

我正在尝试编写一个有点智能的 PHP-MySQL 数据库处理器。当这个处理器决定它需要进行更新时,我想报告它是否真的成功。我以为我可以使用 mysql_affected_rows...

// Example:
// After running query "UPDATE mytable SET name='Test' WHERE ID=1"
$result = mysql_affected_rows();
if ($result >= 1) { /* Success */ }

例如,如果没有 ID=1 的行,则 $result 将为 0

然而,事实证明 PHP 的 mysql_affected_rows 是实际受影响的行,如果该行存在但 name 可能仍然是 0已经是“测试”了。 (PHP docs 竟然说是这样)。

如果我在命令行中运行它,我会得到以下关于查询的元信息:

Query OK, 0 rows affected (0.01 sec)
Rows matched: 1 Changed: 0 Warnings: 0

有什么方法可以让我在 PHP 中获取“匹配的行”值而不是受影响的行?

[编辑]:我应该注意,我知道我可以运行单独的查询,但为了性能,我不想这样做。

最佳答案

来自 MySQL documentation对于 mysql_affected_rows:

For UPDATE statements, if you specify the CLIENT_FOUND_ROWS flag when connecting to mysqld, mysql_affected_rows() returns the number of rows matched by the WHERE clause. Otherwise, the default behavior is to return the number of rows actually changed.

使用 mysqli,您可以使用 mysqli::real_connect 指定 CLIENT_FOUND_ROWS .

$db = mysqli_init();
$db->real_connect('host', 'username', 'password', 'dbname', '3306', null, MYSQLI_CLIENT_FOUND_ROWS);

PDO中,常量名为PDO::MYSQL_ATTR_FOUND_ROWS

$db = new PDO('mysql:dbname=mydatabase;host=myhost', 'username', 'password', array(
PDO::MYSQL_ATTR_FOUND_ROWS => true
));

使用旧的和已弃用的 MySQL 扩展,您可以指定 CLIENT_FOUND_ROWS 传递值 2 作为 mysql_connect (source) 的第 5 个参数。

关于PHP,MySQL - 你能区分匹配的行和受影响的行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925831/

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