2013-08-07 35 views
-2

使用SELECT語句時,PDO可以返回db中的行數嗎?而且,PHP甚至支持命名參數?PDO的侷限性和選擇的語句

+2

是雙方quesions。 – ironcito

+0

雖然可以在一般使用['PDOStatement對象:: rowCount時()'](http://php.net/manual/pdostatement.rowcount.php)與MySQL和'SELECT'語句,它是不可移植的。建議您使用相同的謂詞發出「SELECT COUNT(*)」查詢以檢索準確的行數。 – Phil

+0

但這些並不完全證明。 Php.net甚至說行數只是部分時間。 http://php.net/manual/en/pdostatement.rowcount.php這不是一個使用mysqli而不是pdo的情況嗎? – stevenmw

回答

0

以下例如展示瞭如何獲取這是選擇或影響了PDO行:

<?php 
    $selectsql = $database->prepare('SELECT * FROM table'); 
    $selectsql->execute(); 
    $count = $selectsql->rowCount(); 
?> 

OR

<?php 
    $selectsql = $database->prepare('SELECT COUNT(*) FROM table'); 
    $selectsql->execute(); 
?> 

至於命名參數

https://wiki.php.net/rfc/namedparameters

命名參數是多年來多次提出的主題。利弊被捕獲在各種電子郵件和 (顯然)該功能尚未獲得支持,並沒有實施。 由於該主題不斷被重新提出,並且現在PHP有一個RFC 進程,所以討論應該記錄在RFC中(請注意,這是尚未完成的 ),因此不必重新訪問相同的參數。

我沒有然而,發現模擬它的一些方法:

Simulating PHP Named Parameters

PHP and the lack of Named Parameters

+0

我認爲OP是指查詢中的命名佔位符,即'SELECT ... WHERE foo =:foo'。可能錯誤 – Phil

+0

如果由關聯的PDOStatement執行的最後一條SQL語句是SELECT語句,則某些數據庫可能會返回該語句返回的行數。但是,不能保證所有數據庫的這種行爲,並且不應該依賴便攜式應用程序。 - [PDOStatement :: rowCount](http://php.net/manual/en/pdostatement.rowcount.php) – ironcito

+0

我是。行數不總是工作。什麼是替代方案?如果我使用COUNT(),如何使用像mysqli一樣存儲的行數來創建一個變量?我在問什麼是有什麼全面的證明方法來計算行與pdo和選擇語句並存儲計數 – stevenmw

1

可以使用SELECT staement當PDO返回在DB的行數?

從db中選擇任何數據沒有限制。
PDO可以返回表中的行數以及您希望從數據庫中選擇的任何其他信息。只需選擇它。你會沒有任何問題。就這樣。

0

當使用MySQL驅動,這些條碼是等同

// using rowcount 
$stmt = $pdo->prepare('SELECT * from `foo` WHERE `bar` = :bar'); 
$stmt->execute(array('bar' => 'bar')); 
$count = $stmt->rowCount(); 

// using a COUNT query 
$stmt = $pdo->prepare('SELECT COUNT(1) from `foo` WHERE `bar` = :bar'); 
$bar = 'bar'; 
$stmt->bindParam('bar', $bar); 
$stmt->execute(); 
$count = $stmt->fetchColumn(); 

我已經使用在查詢中指定的佔位符(這是完全可能的)也示出。

的第一塊代碼將最有可能與其他DBMS,而第二個會的工作。

+0

謝謝你的幫助。 – stevenmw

1

使用SELECT staement時,PDO是否可以返回db中的行數?

我想象的混亂來自這句話手動莖:

如果由相關PDOStatement對象執行的最後一條SQL語句SELECT語句,有些數據庫返回該返回的行數聲明。但是,不能保證所有數據庫的這種行爲,並且不應該依賴便攜式應用程序。

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

這是數據庫支持或不支持此功能。當您發出SELECT * FROM foo ...聲明,你告訴你想要的數據庫,以[根據一些條件]獲得了foo表中的所有數據。這裏的重點在於數據。數據庫將評估它爲該表提供的所有數據,以回饋給您所要求的內容。這可能會或可能不會得到某些指數的幫助,這可能會或可能不會發生異步,數據庫可能會或可能不會知道它能夠提供多少結果。這一切都取決於數據庫的內部。在某些存儲形式中,數據庫可能根本不知道會有多少結果,直到它實際提取了所有結果。

因此,當你調用PDOStatement::rowCount,結果可能會或可能不會根據數據庫上準確。 PDO API只是公開數據庫提供的任何內容,並且由於PDO可用於與許多不同的數據庫進行通信,因此其功能取決於您正在與之通話的數據庫。

而且也PHP甚至支持命名的參數?

PHP?!是的,PHP有很多數據庫API,它們支持具有命名參數的參數化查詢。 PDO就在其中。

+1

在青少年時代,PDO也沒有對於MySQL的行數,我相信。你可以在08年的SO上找到一些遺留問題,證明這一點。無論如何,這些功能都是無用功能。 –

+1

夠公平的,這顯然是一個在5.1.6和5.2.2之間存在的bug,並且已經[在五年前修復](http://php.net/ChangeLog-5.php#5.2.2),所以它不再是一個問題。 :) – deceze