我遇到了mysqli的问题。我正在尝试在数据库中搜索符合类别的所有人。循环结果时,我想创建一个“Person”类的实例,将数据库连接传递给类。这是问题开始的地方。这是我的代码。
$con = new mysqli($db_host,$db_user,$db_password,$db_name);
if (mysqli_connect_errno())
{
die(mysqli_connect_error()); //There was an error. Print it out and die
}
$sql = "SELECT id FROM users";
$stmt = $con->prepare( $sql );
if ($stmt)
{
$stmt->execute();
$stmt->bind_result($id);
while($stmt->fetch())
{
$person = new Person( $con );
}
$stmt->close();
}
如果我将$person = new Person( $con );
移动到while循环之后,它会成功生成最后一个人的对象。它在循环内部时不起作用。这是什么原因?
答案 0 :(得分:0)
根据显示的错误,在使用之前的结果集之前,不能使用相同的连接。为了使它工作,你可以这样做:
$personIDs = array();
while($stmt->fetch())
{
$personIDs[] = $id;
}
$stmt->close();
而不仅仅是通过缓冲到数组中的所有ID:
foreach($personIDs as $id) {
$person = new Person( $con );
}
或者,您可以使用store_results
if ($stmt)
{
$stmt->execute();
$stmt->bind_result($id);
$stmt->store_results();
while($stmt->fetch())
{
$person = new Person( $con );
}
$stmt->free_result();
$stmt->close();
}