当前位置: 首页 > 面试题库 >

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

邰博远
2023-03-14
问题内容

我正在尝试编写有点智能的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是实际受影响的行,如果该行存在但已经是“ Test” ,则可能仍为
0name。(PHP文档甚至说是这种情况)。

如果我在命令行中运行此命令,则会获得以下有关查询的元信息:

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

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

[ 编辑 ]:我应该注意,我知道我可以运行一个单独的查询,但是出于性能考虑,我不想这样做。


问题答案:

从MySQL文档中获得mysql_affected_rows

对于UPDATE语句,如果在连接到mysqld时指定CLIENT_FOUND_ROWS标志,则mysql_affected_rows()返回WHERE子句匹配的行数。否则,默认行为是返回实际更改的行数。

使用 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扩展,您可以指定传递值2的CLIENT_FOUND_ROWS作为mysql_connect(source)的第五个参数。



 类似资料:
  • 问题内容: 使用php / mysql如何获取查询影响的行数? 到目前为止我尝试过的是: 但它表示警告:mysql_num_rows():提供的参数不是有效的MySQL结果资源 问题答案: 如果您使用的是PDO(我建议使用PDO),则直接查询将返回受影响的行数。对于Prepared Statements, 有一个称为的方法。 如果您使用的是mysql函数,则有。 编辑: 似乎您正在使用mysql函

  • 问题内容: 我有这个查询: 我的表是,我有一列名为。我要更新的是名为“ yes” 的列。 知道我在做什么错吗?当我返回查询时,它说受影响的0行。 问题答案: 如苯丙胺和Yada所建议,如果您的电话号码在表中,请使用进行检查。 但是请记住:如果所讨论的行的值已经是“是”,则mysql不会更改该值,因此将返回“受影响的0行”。因此,请务必同时检查

  • 问题内容: 假设我有一个名为“ t”的表 考虑两个MYSQL查询 同时执行两个查询还会使“受影响的行”为0(即,不更新任何行),因为第一个查询是不更新的更新,第二个查询是不匹配的更新。 有什么办法可以区分这两种情况吗? 问题答案: 如果只需要“匹配”行的数量(而不是“已更改”行的数量),则可以按以下说明进行设置: http://dev.mysql.com/doc/refman/5.5/en/mys

  • 问题内容: 如何访问受以下因素影响的行数: 问题答案: 尝试使用: 将包含一个元素为的元组。因此找到行数: 或者,如果您愿意一口气做到这一点: PS。最好在可能的情况下使用参数化的参数,因为它可以在需要时自动为您引用参数,并防止sql注入。 参数化参数的正确语法取决于您的python /数据库适配器(例如mysqldb,psycopg2或sqlite3)。它看起来像

  • 问题内容: 我如何查找我的更新是否成功?我使用where uniqueName = name进行更新,因此我应该始终只更新0行或1。什么是检查我是否更新了行的好方法? 问题答案: 将返回受更新影响的行数。 http://us.php.net/manual/zh/function.mysql-affected- rows.php

  • 问题内容: 我目前正在从事C#项目,并且正在运行一个插入查询,该查询也同时进行选择,例如: 有没有一种方法可以查看此查询期间插入了多少行? 问题答案: -返回受影响的行数。