如何在不运行两个单独的进程调用的情况下获取DBI中的行数?

Gen*_* S. 12 perl dbi

我在Perl中运行DBI并且无法弄清楚当我运行预准备语句时,我可以判断返回的行数是否为0.

我意识到我可以在我的while循环中设置一个计数器来获取我的行,但我希望有一个不那么难看的方法.

Har*_*lby 19

基于这里的快速浏览,似乎在你跑完之后

$statement->execute($arg)
Run Code Online (Sandbox Code Playgroud)

您可以通过访问行计数

$statement->rows
Run Code Online (Sandbox Code Playgroud)

  • 请注意[http://search.cpan.org/~timb/DBI-1.608/DBI.pm#rows POD]中关于行的非常重要的警告. (3认同)
  • 如上所述,对select语句不起作用. (2认同)

Joh*_*usa 11

文档中"警告"(链接到对另一个答案的评论)很重要,并提供真实,正确的答案:

通常,在 -SELECT执行后(对于某些特定操作,如UPDATE和DELETE),或者在获取SELECT语句的所有行之后,您只能依赖行计数.

对于SELECT语句,通常不可能知道将返回多少行,除非通过全部获取它们.某些驱动程序将返回应用程序到目前为止所获取的行数,但其他驱动程序可能会返回-1,直到获取所有行为止.因此,不建议使用rows方法或带有SELECT语句的$ DBI :: rows.

  • 所以,既然我们知道 - >行不是问题的答案......答案是什么?在上面引用的例子中(我最初选择的答案是正确的),他们正在做一个选择,然后看看行== 0 ......所以,我又回到了困惑. (3认同)

Edw*_*ges 9

为了找出结果集中有多少行,您有两个选项:

  1. select count(*)
  2. 迭代结果集并计算行数.

你可以通过一个存储过程引入一些魔法,它返回一个数组或更奇特的东西,但最终需要发生这两件事之一.

所以,没有什么方便的方法来获得这个结果.你只需数数:-)