2014-03-28 30 views
0

The PDOStatement class有一個方法PDOStatement對象獲取/使用fetchall參數陣列

public bool execute ([ array $input_parameters ]) 

這需要的參數的關聯數組執行之前綁定到參數化語句。

這與fetchfetchAll相當嗎?

+2

究竟什麼是你想實現什麼? –

+1

獲取和fetchall和執行有關。執行是必需的,那麼如果需要,你可以選擇取或取。 – azngunit81

+0

@ azngunit81啊。所以'fetch'和'fetchAll'隱式調用'execute',如果它還沒有被調用。混亂。謝謝。 – jameshfisher

回答

3

之間完全可以接受的折衷眼見我的意見是不夠的 - 這裏是一個完整的答案,將讚揚用戶「你的常識」誰開始答案。

如前所述 - 獲取/使用fetchall致意執行(你需要使用它,如果你正在做一個SELECT語句後執行)

不同的是,取指檢索一行,那裏的使用fetchall將讓你整個有效載荷。如果有效負載很低 - 您可以獲取它,然後迭代自己而無需再次通過獲取部分。舉個例子:

$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet'; 
    try { 
    $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); 
    $stmt->execute(); 
    $row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST); 
    do { 
     $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n"; 
     print $data; 
    } while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR)); 
    $stmt = null; 
    } 
    catch (PDOException $e) { 
    print $e->getMessage(); 
    } 
} 

可以體現在這種情況下,提取和做$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);然後foreach($rows as $row)其中$row是每一行

1

這些功能有不同的用途。

​​用於查詢執行,fetchAll()用於結果提取。儘管確實可以使它們互換,但PDO作者決定不這樣做。這確實是這個偉大的圖書館的不一致。

所以,你應該輪流打電話給他們。你甚至不能使用方法鏈接,因爲execute返回布爾值而不是self。但是,稍作調整就很有可能。我在我的PDO helper library使得它,使它能夠像這樣調用:

$data = DB::prepare("SELECT * FROM t WHERE id=?")->execute([$id])->fetchAll(); 

我覺得這易用性和兼容性

相關問題