当我使用 DBI 的准备/执行非 select 语句时,如何获取受影响的行数?
根据 DBI 文档,看来我只能通过 do方法。
$rows_affected = $dbh->do("UPDATE your_table SET foo = foo + 1");
如果我使用prepare
/execute
如何才能得到相同的结果?
According to the DBI documentation, it seems I can only get the number of affected rows by the do
method.
$rows_affected = $dbh->do("UPDATE your_table SET foo = foo + 1");
How can I get the same result if I use prepare
/execute
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
从有关 DBI 中的
execute
方法 的文档中:From the documentation about the
execute
method in DBI:如果您的查询是非SELECT查询(例如UPDATE或DELETE),那么您可以利用行:
行返回受最后一个影响的行数查询或-1 如果出现错误。但是,根据设计,您不能依赖行来执行 SELECT 语句。
请注意,对于非 SELECT 查询,还要执行 返回受影响的行数。但是,如果没有行受到影响,则 execute 返回 "0E0"(Perl 无论如何都应将其视为 0)。
相反,如果您的查询是SELECT,那么您就不能依赖行。
但是,您可以执行以下任一操作:
或者,类似地:
If your query is a non-SELECT one (e.g. UPDATE or DELETE), then you can take advantage of rows:
rows returns the number of rows affected by the last query or -1 in case of error. However, by design, you cannot rely on rows for SELECT statement.
Note that, for non-SELECT queries, also execute returns the number of rows affected. However, if no row is affected, then execute returns "0E0" (which Perl should anyway treat as 0).
If, instead, your query is a SELECT, then you cannot rely on rows.
However, you can do either:
Or, similarly:
正如user153275所说:
我在此链接中找到了一个有用的解决方案,添加了 where 子句
AND (columnName <> newValue)
:https://www.perlmonks.org/?node_id=1141381
这样查询只会找到要更改的行。
As user153275 said:
I found a useful solution in this link, adding the where clause
AND (columnName <> newValue)
:https://www.perlmonks.org/?node_id=1141381
In this way the query will find only the rows to change.