我知道这个问题以前有人问过,但似乎解决办法是针对所提出的问题。
我有一个代码库,其中有数百个使用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查询,因为我有太多特定的select语句。preg_replace来删除SELECT and FROM之间的所有内容,然后用一个COUNT(*)替换,然后运行第二个查询,但这假设所有查询都是以某种方式设置的。fetchAll,然后count()结果,但这意味着升级if语句的所有实例。那么,如果人们正在将代码更新为PDO,那么替换*_num_rows函数的最佳方法是什么。不是解决特定问题的东西,而是取代*_num_rows功能的东西。如果这是不可能的,那之前是什么让它成为可能呢?
发布于 2015-07-22 18:30:47
所以在每个人的帮助下,这就是我所建立的。
function getRowsAffected() {
$rawStatement = explode(" ", $this->query);
$statement = strtoupper($rawStatement[0]);
if ($statement == 'SELECT' || $statement == 'SHOW') {
$countQuery = preg_replace('/(SELECT|SHOW)(.*)FROM/i', "SELECT count(*) FROM", $this->query);
$countsth = $this->pdo->prepare($countQuery);
if ($countsth->execute()) {
$this->rowsaffected = $countsth->fetchColumn();
} else {
$this->rowsaffected = 0;
}
}
return $this->rowsaffected;
}如果语句是INSERT、UPDATE或DELETE,则$ this ->rowCount()已经在执行阶段被更新,因此我只需要在SELECT和显示上运行第二个查询。
if ($statement == 'INSERT' || $statement == 'UPDATE' || $statement == 'DELETE') {
$this->rowsaffected = $this->sth->rowCount();
}但是,我感觉很糟糕,因为正如我在问题中提到的,我正在寻找一个整体解决方案,我似乎无意中找到了一个对我有用的特定解决方案,因为代码已经要求使用函数的行数。如果代码是这样做的话:
if (mysql_num_rows($result) > 0) {然后,该解决方案仍将创建工作,更新所有实例以使用该自定义函数。
https://stackoverflow.com/questions/31569675
复制相似问题