0

我在使用 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 循环之后,它会成功地创建最后一个人的对象。它在循环内时不起作用。这是什么原因?

4

1 回答 1

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();
}
于 2013-02-04T11:00:42.070 回答