Php 使用MySQLi回显连接SQL表的内容
我在一个系统上工作,这个模块应该会回显数据库的内容 在我添加了一些JOIN语句之前,它工作得非常好 我已经检查并测试了SQL代码,它工作得非常好。不起作用的是我回显联接表内容的部分 我的代码如下所示:Php 使用MySQLi回显连接SQL表的内容,php,mysqli,inner-join,mysqli-fetch-array,Php,Mysqli,Inner Join,Mysqli Fetch Array,我在一个系统上工作,这个模块应该会回显数据库的内容 在我添加了一些JOIN语句之前,它工作得非常好 我已经检查并测试了SQL代码,它工作得非常好。不起作用的是我回显联接表内容的部分 我的代码如下所示: $query = "SELECT reg_students.*, courses.* FROM reg_students JOIN courses ON reg_students.course_id = courses.course_id
$query = "SELECT reg_students.*, courses.*
FROM reg_students
JOIN courses ON reg_students.course_id = courses.course_id
WHERE reg_students.user_id = '".$user_id."'";
$result = mysqli_query($conn, $query);
if (mysqli_fetch_array($result) > 0) {
while ($row = mysqli_fetch_array($result)) {
echo $row["course_name"];
echo $row["course_id"];
课程名称和课程id既不回显也不给出任何错误消息
更新:我实际上需要通过连接更多表和更改所选列来增加查询的复杂性。我需要加入这些表:
tutors
包含以下列:tutor\u id
,t\u fname
,t\u othernames
,email
,电话号码
faculty
包含以下列:faculty\u id
,faculty\u name
,faculty\u code
课程
有以下列:课程id
,课程代码
,课程名称
,导师id
,教员id
我想在原始查询中将这些表加入到reg\u students
表中,这样我就可以按$user\u id
进行筛选,并且我想显示:课程名称
,t\u fname
,t\u其他名称
,电子邮件
,faculty\u name
我无法想象加入user\u info
表会有什么好处,因此我将其删除作为合理的猜测。我还假设您想要的列都来自courses
表,所以我用SELECT中的列名来指定表名
为便于读者阅读,我喜欢使用内部连接
而不是连接
。()
将$user\u id
转换为整数只是我所采用的最佳实践,以防变量由用户提供的/不可信的输入提供
使用mysqli\u num\u rows()
计算结果集中的行数
如果只想使用关联键访问结果集数据,请使用mysqli\u fetch\u assoc()
生成结果集
在编写带有联接的查询时,为每个表声明别名通常很有帮助。这在很大程度上减少了代码膨胀和读者压力
未测试代码:
$query = "SELECT c.course_name, t.t_fname, t.t_othernames, t.email, f.faculty_name
FROM reg_students r
INNER JOIN courses c ON r.course_id = c.course_id
INNER JOIN faculty f ON c.faculty_id = f.faculty_id
INNER JOIN tutors t ON c.tutor_id = t.tutor_id
WHERE r.user_id = " . (int)$user_id;
if (!$result = mysqli_query($conn, $query)) {
echo "Syntax Error";
} elseif (!mysqli_num_rows($result)) {
echo "No Qualifying Rows";
} else {
while ($row = mysqli_fetch_assoc($result)) {
echo "{$row["course_name"]}<br>";
echo "{$row["t_fname"]}<br>";
echo "{$row["t_othernames"]}<br>";
echo "{$row["email"]}<br>";
echo "{$row["faculty_name"]}<br><br>";
}
}
$query=“选择c.course\u name、t.t\u fname、t.t\u othername、t.email、f.faculty\u name
来自注册大学的学生
r.course\u id=c.course\u id上的内部连接课程c
在c.faculty\u id=f.faculty\u id上的内部联接faculty f
c.tutor\u id=t.tutor\u id上的内部联接tutors t
其中r.user_id=“。(int)$用户id;
if(!$result=mysqli\u查询($conn,$query)){
回显“语法错误”;
}elseif(!mysqli_num_rows($result)){
回显“无符合条件的行”;
}否则{
while($row=mysqli\u fetch\u assoc($result)){
回声“{$row[“课程名称”]}
”;
回声“{$row[“t_fname”]}
”;
回声“{$row[“t_othernames”]}
”;
回显“{$row[“email”]}
”;
回声“{$row[“教员姓名”]}
”;
}
}
为了给您提供最好的支持,请创建一个SQLFIDLE演示,或者至少导出您的表和足够的样本行,以便我们进行测试。换句话说,我们希望看到3个创建
表查询和3组插入
查询,这样我们就可以使用您的实际模式/数据。此外,我可以看到一些不太正确的东西mysqli\u fetch\u array($result)
不用于计算行数——事实上,您将忽略第一行数据,因为您在if
条件下使用它。如果您只对课程名称
和课程id
列感兴趣,请在选择
中具体询问。如果您知道它们来自哪个表,请确保指定该表,然后是
,然后是列名。使用mysqli\u fetch\u assoc()
生成一个assoc结果集fetch\u array()
包括索引元素和关联元素。是否确实需要加入user\u info
?您没有从中选择任何内容,但这可能是对您的查询逻辑的关键检查——我不能确定。这实际上是一个假设。假设用户信息相关,我将如何准确地回显这两个表的内容?该表包含以下表导师
,课程
,教员
,以及它们上的一些唯一字段(导师id)。我想在一个表单上回显所有这些表中的字段。好的,这些是表。教师表有[教师id,教师fname,教师其他姓名,电子邮件,电话号码]教师表有[教师id,教师姓名,教师代码]课程表有[课程id,课程代码,课程名称,教师id,教师id]我想加入这些表并回显(课程名称,教师fname,教师其他姓名,电子邮件,教师名称)上面写着:mysqli_num_roes()期望参数1是给定的mysqli_结果。错误指向带有elseif(!mysqli\u num\u rows($result))
的行,然后您没有使用我的代码段。我的代码捕捉到错误,它应该告诉您“语法错误”。请替换我的echo“语法错误”代码>带有echo mysqli_错误($conn)的行代码>