這是通過Kevin Yank
繁忙的PHP連接到MYSQL?
通常,當我們執行一個SELECT查詢,我們使用 的條件而循環或foreach循環來檢索結果中的每一行,一個 的
PHP & MySQL Novice to Ninja, 5th Edition
的一部分在時間:
while ($row = $result->fetch()) foreach ($result as $row)
當我們處理查詢這樣的結果,其實PHP檢索 EAC h循環請求數據庫中的數據,並在移動到下一行時將其丟棄 。這節省了PHP必須使用大量內存來同時保存所有結果行。
大部分是 的時候,我們開發者沒有必要知道PHP是採取這個巧妙的快捷方式。但是,在我們完成前一個查詢的所有 結果之前,我們都希望發送另一個 SQL查詢到MySQL服務器。
那是什麼'這個代碼是關於以 發生,如果我們不小心:我們剛剛運行SELECT查詢 索要屬於某個作者的所有笑話的列表, 和當我們處理該列表時,我們希望爲每個列表執行DELETE查詢 。問題是,據MySQL知道,它仍然是 忙給我們發送SELECT查詢的結果;我們不能只是 中斷它,並要求它開始運行DELETE!如果這樣做, 會導致我們的DELETE失敗並顯示錯誤。
那就是在使用fetchall 方法的用武之地。通過調用我們事先準備好的聲明 ($ S)這個方法,我們要求PHP檢索整個結果集的查詢 的並將它們存儲在一個PHP數組($結果):
我的問題是,爲什麼我可以執行MYSQL語句,而我有PDOStatement
result sets
在我的PHP代碼中使用了一個或多個? 連我都delete
在那些result sets
<?php
include_once $_SERVER["DOCUMENT_ROOT"] . '/DBconnection.inc.php';
$pds1 = $dbi->query("SELECT name FROM tbl1");
$row = $pds1->fetch();
var_dump($row['name']);
$pds2 = $dbi->query("SELECT user FROM tbl2");
$row = $pds2->fetch();
var_dump($row['user']);
$row = $pds1->fetch();
var_dump($row['name']);
$row = $pds2->fetch();
var_dump($row['user']);
$pds3= $dbi->prepare("DELETE FROM tbl1;");
$pds3->execute();
$row = $pds1->fetch();
var_dump($row['name']);
$row = $pds2->fetch();
var_dump($row['user']);
?>