Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.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 使用MySQLi回显连接SQL表的内容_Php_Mysqli_Inner Join_Mysqli Fetch Array - Fatal编程技术网

Php 使用MySQLi回显连接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

我在一个系统上工作,这个模块应该会回显数据库的内容

在我添加了一些JOIN语句之前,它工作得非常好

我已经检查并测试了SQL代码,它工作得非常好。不起作用的是我回显联接表内容的部分

我的代码如下所示:

$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)的行