以前,我喜歡用 ADOdb 來連接資料庫;自從 PDO 被放進 PHP 5.1 後,它便成了我的新寵…
我在 PHP 5.1.6 環境上幫人家抓蟲時,看到以下兩段程式。
$pdo = New PDO(......); $sql = "SELECT ....."; $st = $pdo->prepare($sql); $st->execute(); $rows = $st->fetchAll();
$pdo = New PDO(......); $sql = "SELECT ....."; $st = $pdo->query($sql); $rows = $st->fetchAll();
雖然以上兩段程式都可以取出 $rows ,但重複並交叉執行的話,就會出現問題。
- 這段程式可以正確取出 $rows1 與 $rows2:
$pdo = New PDO(......); $sql = "SELECT ....."; $st = $pdo->query($sql); $rows1 = $st->fetchAll(); $sql = "SELECT ....."; $st = $pdo->prepare($sql); $st->execute(); $rows2 = $st->fetchAll();
- 這段程式只能正確取出 $rows1 ,$rows2 會是個空的陣列:
$pdo = New PDO(......); $sql = "SELECT ....."; $st = $pdo->prepare($sql); $st->execute(); $rows1 = $st->fetchAll(); $sql = "SELECT ....."; $st = $pdo->query($sql); $rows2 = $st->fetchAll();
這問題有兩種解法:
- 別偷懶,乖乖的用 PDO::prepare 與 PDOStatement->execute。
- 若要用變數接收 PDO::query 回傳的 PDOStatement,請先 unset(),例: unset($st); 。