簡體   English   中英

PHP PDO-mysqli_num_rows的替代方法

[英]PHP PDO - alternative for mysqli_num_rows

使用mysqli,我可以使用mysqli_num_rows從選擇查詢中獲取行數。 我找不到無需執行類似SELECT COUNT(*)類的單獨查詢的PDO做到這一點的方法? 我已經有一個記錄集時,看不到執行單獨查詢的意義。

您可以按照此處所述使用SQL_CALC_FOUND_ROWS 例如:

$result = $db->prepare("SELECT SQL_CALC_FOUND_ROWS id, name FROM fruit WHERE calories > 100"); 
$result->execute();
$result = $db->prepare("SELECT FOUND_ROWS()"); 
$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;

當您有一個LIMIT子句時,此選項通常用於獲取完全匹配計數,但是,如果沒有一個子句,它就可以正常工作,它比使用COUNT(*)再次發出相同查詢的效率要高得多,因為它只檢索計數值由第一個查詢值存儲,而不必運行另一個完整查詢。

在Pdo中,您使用rowCount 示例: $string-> rowCount ();

嘗試這個:

$sql = "SELECT count(id) FROM `table` WHERE condition"; 
$result = $db->prepare($sql); 

$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;

RTM: http//php.net/manual/en/pdostatement.rowcount.php

對於大多數數據庫, PDOStatement::rowCount() 不會返回受SELECT語句影響的行數。 而是使用PDO :: query()發出與所要SELECT語句相同的謂詞的SELECT COUNT(*)語句,然后使用PDOStatement :: fetchColumn()檢索將返回的行數。 然后,您的應用程序可以執行正確的操作。

$sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
if ($res = $conn->query($sql)) {

  /* Check the number of rows that match the SELECT statement */
  if ($res->fetchColumn() > 0) {
        /*    .... */

我不想復制整個PHP.net頁面,請閱讀它。

為什么PDO沒有num_rows

您可能認為有2個查詢要慢一些,但事實並非如此。 PDO是用於多個數據庫系統(不僅僅是MySQL)的通用客戶端庫。 出於性能原因,並不是每個數據庫系統都具有內部技術能力來計算查詢選擇中的總行數。 知道行總數需要在服務所有行之前檢查所有行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM