【发布时间】:2015-10-12 17:09:10
【问题描述】:
我知道以前有人问过这个问题,但似乎解决方案是针对所提出的问题的。
我有一个代码库,其中包含数百个使用 mssql_num_rows 的实例。
代码示例:
$db->execute($sql);
if ($db->getRowsAffected() > 0) {
$total = $db->fetch();
在 db 类中:
$this->rowsaffected = mssql_num_rows($this->query_result);
- 我无法创建通用
SELECT count(*) FROM table查询,因为我有太多特定的选择语句。 - 我可以运行
preg_replace来删除SELECT and FROM之间的所有内容,然后替换为COUNT(*)并运行第二个查询,但这假设所有查询都以某种方式设置。 - 我可以先
fetchAll然后count()结果,但这意味着升级 if 语句的所有实例。
如果人们将他们的代码更新为 PDO,那么最好的替代 *_num_rows 函数的方法是什么。不是解决特定问题的东西,而是替代 *_num_rows 功能的东西。如果这是不可能的,是什么让它成为可能?
【问题讨论】:
-
我将它用于 INSERT、DELETE 或 UPDATE 语句。但是: PDOStatement::rowCount() 返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。然而,这种行为并不能保证适用于所有数据库,并且不应依赖于可移植应用程序。
-
为什么需要
SELECT COUNT(*)?我看不出问题出在哪里,一旦查询完成,您就无法计算包含数据库记录的数组的大小,因为这会涉及更改太多 ifs?技术债务处于最佳状态。 -
@N.B.如果你总是选择最好的方法,即使需要更长的时间,你也会在其他地方浪费时间。这个系统很快就会过时。我需要一种快速替换单个功能而不是系统大修的方法。
-
我同意你的观点,自然是过时的系统和快速修复 - 我理解你的观点。但是,请记住,许多访问此站点的人与我们有类似的问题,并且为了未来的代码和项目 - 我们提到了最佳解决方案。通常,最佳解决方案也是实现某事的最短和最简单的方法,因此一个好主意是否也是最佳解决方案以及最短的可能方法在很大程度上取决于上下文和方法。 IMO,您提出的解决方案不是解决问题的最快方法。
-
我问这个特定问题的原因是为了找到一个答案,为什么没有像 *_num_rows 那样的精确解决方案。我最终确实通过杰伊布兰查德得到了答案,基本上没有等价物。到那时,问题就转移到了改变代码工作方式的最佳方法上。我希望杰伊的评论实际上是一个答案,因为我希望它位于顶部。许多人要求使用 *_num_rows 的等价物,因为他们习惯使用它,而真正的答案是没有等价物,所以这里有一些更好的编写代码的方法。
标签: php mysql sql-server pdo mysql-num-rows