来自 2 个表的数据未显示在同一页面上
Posted
技术标签:
【中文标题】来自 2 个表的数据未显示在同一页面上【英文标题】:Data from 2 tables is not displaying on the same page 【发布时间】:2021-08-02 20:45:39 【问题描述】:我是 php 和 mysql 的新手,我目前正在处理个人资料页面,我将在一个名为
的表中显示登录用户的个人信息用户
并且还从这张表中显示他们将来从我的网站预订的旅行:
预订
我正在使用准备好的语句从用户表中获取数据,该语句只会选择登录用户的数据而没有任何问题,代码如下:
<?php
include_once 'php/connection.php';
$sess = $_SESSION['email'];
$sql="SELECT firstname, lastname, email, phone, birthday, gender FROM users WHERE email = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $sess);
$stmt->execute();
if ($stmt->error)echo "something has gone wrong";
$result=$stmt->get_result();
while($row = mysqli_fetch_array ( $result, MYSQLI_ASSOC ))
?>
我在数据将显示代码的部分之后关闭连接:
<h2><?php echo $row["firstname"];?></h2>
<?php
$conn->close();
?>
但是,当我尝试从两个表中获取数据并将其显示在页面上时,我遇到了问题,我已经完成了研究并尝试了许多选项,但它似乎不起作用,这是我尝试过的:
<?php
include_once 'php/connection.php';
$sess = $_SESSION['email'];
$sql="SELECT firstname, lastname, email, phone, birthday, gender
FROM users, booking
WHERE users.email = booking.email AND email = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $sess);
$stmt->execute();
if ($stmt->error)echo "something has gone wrong";
$result=$stmt->get_result();
while($row = mysqli_fetch_array ( $result, MYSQLI_ASSOC ))
?>
通过使用这个脚本,它向我显示了这个错误:
致命错误:未捕获的错误:调用 /storage/ssd1/136/16588136/public_html/profile.php:82 中布尔值的成员函数 bind_param() 堆栈跟踪:#0 main 抛出 /storage/ssd1 /136/16588136/public_html/profile.php 第 82 行
我整天都在尝试解决这个问题,但我无法提出解决方案。有人可以帮我解决这个问题吗?提前致谢。
【问题讨论】:
***.com/questions/27394710/… 我很确定你不能使用 mysql 从多个表中获取数据 嘿,@ShadowLp174,您确实可以从多个表中获取结果集。学习 JOIN 和 UNION。 由于我的解决方案被拒绝,请阅读How to get the error message in MySQLi?您的问题正在发生,因为您没有启用mysqli错误报告。当你启用它时,你会看到像Column 'email' in where clause is ambiguous
这样的错误,告诉你忘记在WHERE
子句中添加表名WHERE users.email = booking.email AND email = ?
【参考方案1】:
你很亲密。由于 SQL 中的错误,您的 ->prepare()
调用失败,因此它返回 false 的 $stmt
值,而不是真正的语句对象。
当您加入多个表时,您需要使用表名来限定查询中的列名。
SELECT u.firstname, u.lastname,
u.email, u.phone, u.birthday, u.gender,
b.something
FROM users u
LEFT JOIN booking b ON u.email = b.email
WHERE u.email = ?
请注意,这使用LEFT JOIN
语法而不是您的示例中的逗号连接语法。逗号连接语法在三年前就已经过时了。 (是的,我知道,时光飞逝。)
请注意,它使用表别名 u
和 b
作为表,以缩短查询。
而且,您应该在每次数据库函数调用后检查错误。这样您就可以更轻松地发现此类问题。
$stmt = $conn->prepare($sql);
if ( !$stmt )
$message = $conn->error;
/* statement didn't prepare correctly */
$stmt->bind_param("s", $sess);
$stmt->execute();
if ($stmt->error)echo "something has gone wrong";
【讨论】:
您决定重开是being discussed on meta以上是关于来自 2 个表的数据未显示在同一页面上的主要内容,如果未能解决你的问题,请参考以下文章