The PDOStatement
class有一個方法PDOStatement對象獲取/使用fetchall參數陣列
public bool execute ([ array $input_parameters ])
這需要的參數的關聯數組執行之前綁定到參數化語句。
這與fetch
或fetchAll
相當嗎?
The PDOStatement
class有一個方法PDOStatement對象獲取/使用fetchall參數陣列
public bool execute ([ array $input_parameters ])
這需要的參數的關聯數組執行之前綁定到參數化語句。
這與fetch
或fetchAll
相當嗎?
之間完全可以接受的折衷眼見我的意見是不夠的 - 這裏是一個完整的答案,將讚揚用戶「你的常識」誰開始答案。
如前所述 - 獲取/使用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
是每一行
這些功能有不同的用途。
用於查詢執行,fetchAll()
用於結果提取。儘管確實可以使它們互換,但PDO作者決定不這樣做。這確實是這個偉大的圖書館的不一致。
所以,你應該輪流打電話給他們。你甚至不能使用方法鏈接,因爲execute返回布爾值而不是self。但是,稍作調整就很有可能。我在我的PDO helper library使得它,使它能夠像這樣調用:
$data = DB::prepare("SELECT * FROM t WHERE id=?")->execute([$id])->fetchAll();
我覺得這易用性和兼容性
究竟什麼是你想實現什麼? –
獲取和fetchall和執行有關。執行是必需的,那麼如果需要,你可以選擇取或取。 – azngunit81
@ azngunit81啊。所以'fetch'和'fetchAll'隱式調用'execute',如果它還沒有被調用。混亂。謝謝。 – jameshfisher