首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等效于mysql_num_rows或mssql_num_rows

等效于mysql_num_rows或mssql_num_rows
EN

Stack Overflow用户
提问于 2015-07-22 17:08:20
回答 1查看 1.6K关注 0票数 2

我知道这个问题以前有人问过,但似乎解决办法是针对所提出的问题。

我有一个代码库,其中有数百个使用mssql_num_rows的实例。

代码示例:

代码语言:javascript
复制
$db->execute($sql);

if ($db->getRowsAffected() > 0) {
    $total = $db->fetch();

在db类中:

代码语言:javascript
复制
$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功能的东西。如果这是不可能的,那之前是什么让它成为可能呢?

EN

回答 1

Stack Overflow用户

发布于 2015-07-22 18:30:47

所以在每个人的帮助下,这就是我所建立的。

代码语言:javascript
复制
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和显示上运行第二个查询。

代码语言:javascript
复制
if ($statement == 'INSERT' ||  $statement == 'UPDATE' || $statement == 'DELETE') {
    $this->rowsaffected = $this->sth->rowCount();
}

但是,我感觉很糟糕,因为正如我在问题中提到的,我正在寻找一个整体解决方案,我似乎无意中找到了一个对我有用的特定解决方案,因为代码已经要求使用函数的行数。如果代码是这样做的话:

代码语言:javascript
复制
if (mysql_num_rows($result) > 0) {

然后,该解决方案仍将创建工作,更新所有实例以使用该自定义函数。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31569675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档