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 回答
-2

为内部循环使用另一个 mysqli 对象。

$mysqli = new mysqli(host, user, password, dbname);
$mysqli2 = new mysqli(host, user, password, dbname);

if ($stmt = $mysqli->prepare("SELECT author_id FROM posts")) {
$stmt->execute();
$stmt->bind_result($author_id);
while ($stmt->fetch()) {
    if ($stmt2 = $mysqli2->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();
于 2013-11-03T07:31:12.150 回答