PHP 准备好的语句准备第二条语句失败
PHP prepared statement fails preparing second statement
我在 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()
需要 return false 而不仅仅是最后一行才能准备第二条语句。
有人对此有更多了解吗?我只用 XAMPP.
测试过它
这很可能是因为仍有结果等待从您的第一个查询中提取。在执行第二个查询之前,尝试:
$stmt->close();
这应该清除缓冲区以允许进一步的查询 运行。
我在 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()
需要 return false 而不仅仅是最后一行才能准备第二条语句。
有人对此有更多了解吗?我只用 XAMPP.
测试过它这很可能是因为仍有结果等待从您的第一个查询中提取。在执行第二个查询之前,尝试:
$stmt->close();
这应该清除缓冲区以允许进一步的查询 运行。