2012-06-15 33 views
2

所以,我一直在學習PDO。到目前爲止,老實說,由於執行小任務需要大量的代碼,所以我一點也不感到印象深刻。然而,如果我能讓我的代碼高效且可重用,我願意轉換。MySQL PDO計數行 - 我可以使這更高效嗎?

我的問題是:我可以使這個代碼更高效嗎?通過高效率,我的意思是A)佔用更少的線,並且B)跑得更快。我很擔心我對這一切都是錯誤的。但是,由於缺少一個num_rows()函數,我想不出一個更好的方法。

try 
{ 
    $sth = $dbh->prepare("SELECT * FROM table_name"); 
    $sth->execute(); 

    if (count($result = $sth->fetchAll())) 
    { 
     foreach ($result as $value) 
     { 
      // Rows returned! Loop through them. 
     } 
    } 
    else 
    { 
     // No rows returned! 
    } 
} 
catch (PDOException $e) 
{ 
    // Exception! 
} 

這寫的是否正確?

回答

1

據我的研究表明,沒有。沒有辦法更簡潔或邏輯地重寫此代碼 - 它的方式完全優化。 :)它很容易使用,所以這絕對不是一件壞事!

-1

不,您需要使用PDO的rowCount方法。

try 
{ 
    $sth = $dbh->prepare("SELECT * FROM table_name"); 
    $sth->execute(); 

    if ($sth->rowCount() > 0) 
    { 
     while ($result = $sth->fetch()) 
     { 
      // Rows returned! Loop through them. 
     } 
    } 
    else 
    { 
     // No rows returned! 
    } 
} 
catch (PDOException $e) 
{ 
    // Exception! 
} 
+0

這不適用於所有使用SELECT語句的數據庫,如PHP文檔中所述。 http://php.net/manual/en/pdostatement.rowcount.php – Nathanael

+0

當然,這是真的。如果數據庫本身不支持rowCount,那麼你做這件事的方式是不可避免的。 – Ananth

+0

mysqli_num_rows()的作品,因爲MySQL支持它! – Ananth

0

使用PDO::query()發出SELECT COUNT(*)聲明具有相同謂詞爲您預期的SELECT語句

然後,使用PDOStatement::fetchColumn()檢索將返回

$sql = "SELECT COUNT(*) FROM table_name"; 
if ($res = $conn->query($sql)) 
{ 
/* Check the number of rows that match the SELECT statement */ 
$res->fetchColumn(); //This will give you the number of rows selected// 
} 

做一個行數一般的功能就是這麼做的,你所需要做的就是根據你的需求發送一個select count。您可以通過將$ select分爲更多變量來更通用。

function countRows($select) 
{ 
    if ($res = $conn->query($select)) 
    { 
    /* Check the number of rows that match the SELECT statement */ 
    return $res->fetchColumn(); //This will give you the number of rows selected// 
    } 
} 
+0

這將需要我運行兩個查詢,但是,正確嗎?一個給COUNT(*),另一個實際循環。 – Nathanael

+0

是的,通過第二個查詢,您可以處理真實的結果。 –

+0

這需要更多的代碼,並且使得維護更加耗時,因爲如果進行更改,兩個查詢都必須被修改。我當然不想在我的應用程序中這樣做! – Nathanael

相關問題