这是我的代码...它是关于使用php mysqli扩展
<?php
error_reporting(E_ALL);
$db = new mysqli("localhost","root","","dee");
if ($db->connect_errno)
{
die('Unable to connect to database');
}
mysqli_set_charset($db,"utf8");
$storeid=4;
$categoryid=6;
$statement_store = $db->prepare('SELECT * FROM tbl_store WHERE store_id=?');
$statement_store->bind_param('i',$storeid);
$statement_store->execute();
$statement_store->store_result();//---------------(1)
$statement_store->bind_result($store_id,$store_name,$store_description,$store_image,$store_open,$store_close,$store_foldername);
$statement_store->fetch();
$store = $store_name;
//$statement_store->close();//--------------(2)
$statement_category = $db->prepare('SELECT * FROM tbl_category WHERE category_id=?');
$statement_category->bind_param('i',$categoryid);
$statement_category->execute();
$statement_category->bind_result($category_id,$category_name);
$statement_category->fetch();
$category = $category_name;
echo $store;
echo '<br>';
echo $category;
?>
谁能告诉我这里发生了什么?
答案 0 :(得分:2)
当您不使用store_result()
或close()
时,您的第一个预备声明(或其结果)仍然是“有效”。这意味着您必须以某种方式读取数据,然后才能发出新的预准备语句。因此,您的第二个prepare()
语句将失败,它将返回布尔值false
。
检查$db->error
字段,您将看到“命令不同步;您现在无法运行此命令”错误消息。从MySQL手册B.5.2.14 Commands out of sync:
如果在客户端代码中获得
Commands out of sync; you can't run this command now
,则表示您以错误的顺序调用客户端函数。例如,如果您使用
mysql_use_result()
并尝试在调用mysql_free_result()
之前执行新查询,则可能会发生这种情况。如果您尝试执行两个返回数据的查询而不在其间调用mysql_use_result()
或mysql_store_result()
,也会发生这种情况。