0

準備済みステートメント内で準備済みステートメントを実行しようとしていますが、成功しませんでした。これが私のコードです:

if ($stmt = $mysqli->prepare("SELECT author_id FROM posts")) {
$stmt->execute();
$stmt->bind_result($author_id);
    while ($stmt->fetch()) {
        if ($stmt2 = $mysqli->prepare("SELECT username FROM users WHERE id=? LIMIT 1")) {
            $stmt2->bind_param("s", $author_id);
            $stmt2->execute();
            $stmt2->bind_result($username);
            $stmt2->fetch();
            $stmt2->close();

            //showing username
            echo $username;
        }
    }
    $stmt->close();
}

author idテーブルから取得してからauthor id、別のテーブルから作成者の名前を取得しようとしています。
これを行う方法を教えてください。または、このスクリプトを変更すると、それを実行できます。

4

2 に答える 2

2

ときどき、このサイトの PHP セクションで目が痛くなります。質問にはプログラミングのあらゆる面で非常に基本的な知識が欠けているだけでなく、回答もひどい慣行を助長します。

  1. 特定の理由を認識させるために、エラーを報告する必要があります。$conn->error例外モードで mysqli を使用するか、設定することにより、通常の方法で。
  2. エラーメッセージを読んだ後、グーグルで解決策を探すことができます -store_result()
  3. このようなデータセットの場合、代わりにJOINを使用する必要があるため、ループは必要ありません。

そして、コード全体が

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$sql = "SELECT username FROM posts p, users u WHERE u.id=author_id";
$res = $mysqli->query($sql);
while ($row = mysqli_fetch_row()) {
    echo $row[0];
}
于 2013-11-03T07:50:50.627 に答える