【问题标题】:SQLite vs MySQL ->rowCount() [duplicate]SQLite 与 MySQL ->rowCount() [重复]
【发布时间】:2016-03-14 19:07:44
【问题描述】:

我正在编写一个应该可以简化我的工作的 CRUD 类。 现在我正试图让它与“SQlite”和“MySQL”一起工作。 MySQL 的 CRUD 可以正常工作,但是自从我尝试从 SQLite 数据库中获取数据后,这让我的生活变得艰难:)。

下面的代码是用于从给定表中获取所有内容的有效 MySQL CRUD 函数。

public function getAll($table){        
    $stmt = $this->db->prepare("SELECT * FROM $table");
    $stmt->execute();

    if($stmt->rowCount()){
        $item = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $item;
    }


    return false;
}

如果我在 SQLite 数据库上尝试上面的函数,它不会返回任何内容。

但是,当我更改代码时,它确实返回了请求的项目。 下面的函数适用于 SQLite 数据库,但验证很少。

public function getAll($table){        
    $stmt = $this->db->prepare("SELECT * FROM $table");
    $stmt->execute();

    $items = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $items;

}

所以我的结论是 rowCount() 函数不适用于 SQLite。 我该如何解决这个问题,以便 SQLite CRUD 首先查看是否真正返回了任何内容? 如果它被退回,我可以退回这些物品。 如果行为空,则应返回 false 。

希望你们能理解我想说的。

最好的问候

【问题讨论】:

标签: php mysql pdo sqlite


【解决方案1】:

rowCount() 仅在 MySQL 和其他一些平台上使用是真正安全的。它不适用于 SQLite 等便携式应用程序。

来自the manual

如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,某些数据库可能会返回行数 由该语句返回。但是,不能保证这种行为 适用于所有数据库,不应依赖于便携式 应用程序。

【讨论】:

  • 那么使用 try/catch 方法会更好吗?或者有没有其他方法可以验证是否真的返回了一些东西?
  • @JochemHoltackers 做$item = $stmt->fetchAll(PDO::FETCH_ASSOC); if($item && count($item)){ /* do stuff */ }
  • 工作就像一个魅力!感谢您的帮助!
  • @JochemHoltackers,太棒了!如果我有帮助,请考虑按我的回答打勾。
猜你喜欢
  • 2012-09-18
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2017-03-14
相关资源
最近更新 更多