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()。我编辑了我的答案。 –
不错,那是一个。 –