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 ループの直後に to を移動すると、最後の人のオブジェクトが正常に作成されます。ループ内では機能しません。これの理由は何ですか?

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 に答える