4
我在PHP中遇到了一個有關預準備語句的奇怪行爲。谷歌搜索這個問題沒有得到任何成果,所以它就是這樣。PHP準備的語句沒有準備第二條語句
假設你有這樣的代碼:
<?php
$db = new mysqli('localhost','root','','test');
$q = 'SELECT text FROM tests';
if($stmt = $db->prepare($q))
{
$stmt->bind_result($clmn);
$stmt->execute();
$stmt->fetch();
echo '</br>'.$clmn;
}
else echo "</br>didn't prepare first";
$q = 'SELECT id FROM tests';
if($stmt = $db->prepare($q))
{
$stmt->bind_result($clmn);
$stmt->execute();
$stmt->fetch();
echo '</br>'.$clmn;
}
else echo "</br>didn't prepare second";
?>
數據庫僅有2列和2行的虛擬數據:
現在,當我運行代碼,我的期望是輸出是這樣的:
foo
1
我得到的是:
foo
didn't prepare second
現在我做了一些測試,結果發現,當我交流這個:此
$stmt->fetch();
echo '</br>'.$clmn;
:
while($stmt->fetch())
echo '</br>'.$clmn;
我得到這樣的結果:
foo
bar
1
2
我的想法是準備好的陳述不能直到取出前一個的所有行爲止。請注意,fetch()
需要返回false,而不僅僅是最後一行,以便準備第二條語句。
有人對此有更深入的瞭解嗎?我只用XAMPP測試過它。
'致命的錯誤:調用未定義的方法mysqli_stmt :: free()在C:\ xampp \ htdocs \ Test.php 14行上' –
抱歉,我的錯誤。嘗試close()而不是free()。我編輯了我的答案。 –
不錯,那是一個。 –