首页 文章

解决PHP5的PDO rowCount MySQL问题

提问于
浏览
14

我最近开始使用PHP5开发一个新项目,并希望使用他们的PDO类 . 问题是MySQL PDO驱动程序不支持rowCount(),所以没有办法运行查询然后获取受影响的行数或返回的行数,这是一个相当大的问题,就我而言 . 我想知道是否有其他人已经处理过此问题,以及你为解决这个问题所做的工作 . 必须执行fetch()或fetchAll()来检查是否有任何行受到影响或返回似乎是对我的攻击,我宁愿只做$ stmt-> numRows()或类似的东西 .

3 回答

  • 25

    您可以在原始 SELECT 查询后立即发出 SELECT FOUND_ROWS() 查询以获取行数 .

    $pdo->query("SELECT * FROM users");
    $foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
    

    另见:MySQL Docs on FOUND_ROWS()

  • 1

    这个问题是基于几个错误的假设和一个过时的陈述 .

    首先,不要混淆受影响和选定行的数量 . PDO甚至在09年支持前者 .

    说到SELECT语句返回的行数 - 您只需要那个数字 . 你拥有的数据就足够了 .

    是的,现在 rowCount() 也支持从mysql中选择的行数 . 但同样 - 无论如何,你在普通的网络应用程序中不需要这个数字 .

  • 0

    对于那些使用MySQL存储过程的人来说,这个解决方案并不可行 . 我建议您做的是让您的存储过程创建两个行集 . 第一个包含一行和一列,包含记录数 . 第二个是用于获取该行数的记录集 .

    无限行数可以是 SELECT COUNT(*) ,与没有 LIMIT / OFFSET 子句的第二行集具有完全相同的 WHERE 子句 .

    另一个想法可能是创建一个临时表 . 使用 SELECT 语句填充临时表 . 然后你可以使用 SELECT COUNT(*) FROM tmpTable 作为你的第一个行集,而 SELECT * FROM tmpTable 作为你的第二行集 .

相关问题