【问题标题】:Multiple SQL Queries Into Multiple Arrays多个 SQL 查询到多个数组中
【发布时间】:2013-08-26 22:06:39
【问题描述】:

我有这个页面,它可以快速查看已登录用户的个人资料,以及一些编辑功能,所以为了避免混淆,我将发布所有代码,忽略 html。

在代码的开头,我检索用户信息,然后将其存储到一个名为 $row 的数组中。稍后在代码中,我正在从一个单独的表中检索行,并且我想将它们存储到一个数组中($postRow)。但是我只是通过阅读发现,您只能在每页执行一个 SQL 查询而不运行我坦率地说不理解的代码,并且我发现的关于该问题的唯一代码花絮将信息直接打印到页面上,我找不到任何关于如何将它们都存储到数组中的信息。有人可以帮我解决这个问题吗?我真的是进退两难。

<?php
    include('header.php');
    if (isset($_SESSION['username'])){
        require 'connect.php';

        $user = $_SESSION['username'];

        $query = mysqli_query($connect, "SELECT * FROM users WHERE username='$user';", MYSQLI_USE_RESULT);
        $row = mysqli_fetch_assoc($query);
        ?>
        <h4>BlogHub > Profile > <?php echo $row['fname']." ".$row['lname']; ?></h4>
        <div id="profileAva">
            <img src="<?php echo $row['avatar']; ?>" />
        </div>
        <h5 id="infoDisp" style="margin:3px;"><?php echo "ID #".$row['ID']." - ".$row['fname']." ".$row['lname']." - ".$row['username']." - ".$row['email']." - ".$row['posts']." Posts"; ?></h5>
        <?php
        $id = $row['ID'];
        $recentPost = mysqli_query($connect, "
        SELECT * 
        FROM  `blog_posts` 
        WHERE poster_id='$id'
        LIMIT 1
        ", MYSQLI_USE_RESULT);
        $postRow = mysqli_fetch_assoc($recentPost);
        ?>
        <p></p>
        <div id="changeAva">
            <button class="cancelQuery">x</button>
            <center>
            <form style="padding-top:20px;" class="boxI" enctype="multipart/form-data" action="changeAva.php" method="POST">
                <input style="padding-bottom:15px;" type="file" value="Choose a Avatar" name="file"/><br />
                <button type="Submit">Submit</button>
            </form>
            </center>
        </div>
        <div id="changeInfoBox">
            <button class="cancelQuery">x</button>
            <center>
                <form action="changeInfo.php" method="POST">
                    First Name: <input type="text" name="fname" value="<?php echo $row['fname']; ?>" /><br />
                    Last Name: <input type="text" name="lname" value="<?php echo $row['lname']; ?>" /><br />
                    Email: <input type="text" name="email" value="<?php echo $row['email']; ?>" /><br />
                    <button type="submit">Submit</button>
                </form>
            </center>
        </div>
        <?php
    }
    else {
        echo "<center><p>You need to be logged in to view this page.</p></center>";
    }
    include('footer.php');
?>

【问题讨论】:

    标签: php mysql sql arrays mysqli


    【解决方案1】:

    在脚本执行期间执行的查询数量没有限制。但是,您没有理由无法在单个查询中获取此信息。您将使用 JOIN 来执行此操作。

    这可能看起来像这样:

    SELECT bp.*
    FROM users AS u
    INNER JOIN blog_posts AS bp
      ON u.id = bp.poster_id
    WHERE u.username = '?'
    

    您在对其他答案的评论中提到的特定问题是因为您需要在进行下一个查询之前致电mysql_free_result()

    【讨论】:

    • 但如果我只想要该用户的最新帖子(1 个帖子),我还需要使用 INNER JOIN 吗?
    • 天啊,你的 MYSQL_USE_RESULT 让我失望了,谢谢 Mike。欣赏它。
    • @GeorgeColeman 如果您的输入是用户名(在用户表上)但您要在blog_posts 中查找的数据,那么如果您想使用单个数据获取此数据,则需要进行连接查询,而不是像您目前正在做的那样在两个查询中进行。
    猜你喜欢
    • 2018-07-16
    • 2011-04-04
    • 1970-01-01
    • 2015-06-30
    • 2018-07-15
    • 1970-01-01
    • 2017-04-30
    • 2015-02-02
    • 2011-01-15
    相关资源
    最近更新 更多