php - 来自 2 个表的数据未显示在同一页面上
问题描述
我是 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() 堆栈跟踪:在 /storage/ssd1/136/ 中抛出 #0 {main} 16588136/public_html/profile.php 第 82 行
我整天都在尝试解决这个问题,但我无法提出解决方案。有人可以帮我解决这个问题吗?提前致谢。
解决方案
你很亲密。->prepare()
由于 SQL 中的错误,您的调用失败,因此它返回值$stmt
false而不是真实的语句对象。
当您 JOIN 多个表时,您需要使用表名限定查询中的列名。
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";}
推荐阅读
- javascript - VSCode:片段 - 将字符转换为另一个等长的行
- java - 如何使用 Java 开发开放身份提供者
- r - 是否有 ggplot2 类似于 R 中的 avPlots 函数?
- c# - 在低带宽的离线卫星环境中,服务器到服务器数据传输的最佳方式是什么
- ios - 动态链接对象没有 url
- javascript - 让事件多次运行,Highcharts
- python-3.x - 在 wxPython 中使用 sizer 并添加一个小部件时,如果将 -1 设置为比例,这意味着什么?
- selenium - 使用 Selenium Web 驱动程序,无法截取带有工具提示文本的网页截图
- angularjs - 在 AngularJS -$http.get 错误:$http.get() 不是函数
- c++ - C++ PyImport 的 Python 覆盖率