内循环时不能使用数据库连接

时间:2013-02-04 10:24:36

标签: php loops mysqli connection

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

1 个答案:

答案 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();
}