Php 从两个数据库表中匹配id以从一个数据库表中获取用户名
我想将公告表中的用户id列与用户表中的id列相匹配。然后我想从id匹配的users表中获取用户名 我最初有以下疑问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
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