Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从两个数据库表中匹配id以从一个数据库表中获取用户名_Php_Mysql_Sql_Join - Fatal编程技术网

Php 从两个数据库表中匹配id以从一个数据库表中获取用户名

Php 从两个数据库表中匹配id以从一个数据库表中获取用户名,php,mysql,sql,join,Php,Mysql,Sql,Join,我想将公告表中的用户id列与用户表中的id列相匹配。然后我想从id匹配的users表中获取用户名 我最初有以下疑问 if ($announcements_stmt = $con->prepare("SELECT * FROM announcements")) 我的当前代码出现以下错误 Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepare

我想将公告表中的用户id列与用户表中的id列相匹配。然后我想从id匹配的users表中获取用户名

我最初有以下疑问

if ($announcements_stmt = $con->prepare("SELECT * FROM announcements"))
我的当前代码出现以下错误

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in  
我知道这意味着什么,但我是否需要从我的用户表中添加每个列表才能工作,或者是否有其他方法可以做到这一点?如果我确实需要将所有列作为变量添加到bind_结果中,那么我将它们放在哪个顺序中有关系吗?首先是公告还是用户,反之亦然

if ($announcements_stmt = $con->prepare("SELECT * FROM announcements
                        INNER JOIN users
                        ON announcements.user_id = users.id")) {


    $announcements_stmt->execute();
    $announcements_stmt->bind_result($announcements_id, 

$announcements_user_id, $announcements_messages, $announcements_date); 

        if (!$announcements_stmt) {
            throw new Exception($con->error);
        }
        $announcements_stmt->store_result();
         $announcements_result = array();

?>

            Current Announcements
            <table>
                <tr>
                    <th>ID</th>
                    <th>Username</th>
                    <th>Message</th>
                    <th>Date</th>
                </tr>   
<?php
        while ($row = $announcements_stmt->fetch()) {
?>
                <tr>
                    <td><?php echo $announcements_id; ?></td>
                    <td><?php echo $announcements_username; ?></td>
                    <td><?php echo $announcements_messages; ?></td>
                    <td><?php echo $announcements_date; ?></td>
                </tr>   

<?php
        } 
?>

    }
更新

 if ($announcements_stmt = $con->prepare("SELECT announcements.id, announcements.user_id, announcements.messages, announcements.date, users.username FROM announcements
                        INNER JOIN users
                        ON announcements.user_id = users.id")) {


    $announcements_stmt->execute();
    $announcements_stmt->bind_result($announcements_id, 

$announcements_user_id, $announcements_messages, $announcements_date, $announcements_username); 

        if (!$announcements_stmt) {
            throw new Exception($con->error);
        }
        $announcements_stmt->store_result();
         $announcements_result = array();

?>

            Current Announcements
            <table>
                <tr>
                    <th>ID</th>
                    <th>Username</th>
                    <th>Message</th>
                    <th>Date</th>
                </tr>   
    <?php
            while ($row = $announcements_stmt->fetch()) {
    ?>
                    <tr>
                        <td><?php echo $announcements_id; ?></td>
                        <td><?php echo $announcements_username; ?></td>
                        <td><?php echo $announcements_messages; ?></td>
                        <td><?php echo $announcements_date; ?></td>
                    </tr>   

    <?php
            } 
    ?>

        }
                </table>
    <?php 
            }           
        }

警告表示将结果字段绑定到变量时,变量数量与结果集中的字段数量不匹配:

$announcements_stmt->bind_result($announcements_id, $announcements_user_id, $announcements_messages, $announcements_date, $announcements_username); 
解决此问题的简单方法是始终在SELECT语句中指定字段,例如:

SELECT t1.id, t1.user_id, t1.messages, t1.date, t2.username
而不是:

SELECT *

看起来您是在不存在占位符的情况下绑定变量-您的应用程序似乎没有where子句sql@RamRaider我将如何构建这个。我不完全确定你说的是什么。哎呀-我误读了代码-我以为你是在绑定参数,但实际上是在绑定结果集的字段-对不起。虽然我没有PHP方面的经验,但我猜记录集将有4个以上的字段。但是,您绑定$announcements\u user\u id并尝试访问$announcements\u username看起来是什么样子。它们都一样吗?不,在我的公告表中,我只有id、用户id、消息和日期。用户名来自用户表。我只是不知道如何绑定结果。我已经绑定了公告表中所有内容的结果。我不知道如何从我想要的users表绑定结果。用户名字段。在“选择并阅读绑定结果手册”中指定users.username,这样您就知道自己在做什么。列和变量必须匹配。那么这是什么?通知上的内部JOIN users.username.user\u id=users.id那么如何绑定它?不。。读我的答案。在选择后指定所需的字段。这是否更接近您的意思?选择t1.id、t1.user\u id、t1.messages、t1.date、t2.username