2016-02-28 103 views
0

试图查询类,教师,课外和学生的主要列表,但是当我运行查询时,我得不到任何结果。PHP/SQL查询返回Nothing

//query to get the student ID if user enters "name" on the page 

$student_name= $_POST["name"]; 
$studentid= "SELECT studentid FROM students WHERE name='$student_name'"; 
$id_query = mysqli_query($dbcon, $studentid); 
$student_id= mysqli_fetch_array($id_query); 

//should query stuff related to the student. 

$sqlstudentquery= "SELECT c.name, c.teacher, e.name, m.name 
    FROM students AS s 
    LEFT JOIN classes AS c ON s.studentid = c.stude_id 
    LEFT JOIN extracurricular AS e ON s.studentid = e.stude_id 
    LEFT JOIN majors AS m ON s.studentid = m.stude_id 
WHERE s.studentid='$student_id[0]'"; 
$student_data = mysqli_query($dbcon, $sqlstudentquery); 

当我输入搜索词时,页面将尝试加载但不返回任何数据。我试图在数据库上手动输入查询,但它返回一个空查询。我应该使用内部连接而不是离开?

编辑:我发现这个后,我发现在我的PHP语法错误。我修好了。 SQL查询仍然不起作用。

edit2:sql查询现在可以工作了,谢谢。

+0

'print_r($ student_id);'chk this – devpro

+2

在第一个查询中,您将学生的ID称为“SELECT student FROM”,在第二个查询中,您使用的是'students.studentid'那么什么是正确的领域?您的第一个或第二个查询是错误的。 –

+0

如果查询在数据库接口中不起作用,这不是PHP问题,而是SQL/mysql问题。数据库是什么样的,你能提供一个sqlfiddle吗? – chris85

回答

4
$student_name= $_POST["name"]; 
$studentid= "SELECT student FROM students WHERE name='$name'"; 
$id_query = mysqli_query($dbcon, $studentid); 

您正在寻找的名字$name,但是你只设置了一个名为$student_name

所以实际上你正在寻找在Students表有name=''值varaible。

而且

WHERE s.studentid='$student_id[0]'"; 

你正在寻找一个studentid列值,但是这是对从studentstudent列中的数据进行检查。这看起来像试图用varchar型字符值(student)检查数字索引字段(studentid)。


进一步了解详细:

你也行WHERE s.studentid='$student_id[0]'";这完全从当前的SQL查询,取值是:

student表命名student_ids.student_id和您正在查询的值是$sudent_id[0],它来自查询上方的查询student列的值student桌。这意味着你永远不会找到任何结果,因为它比较了几乎肯定包含不同值的两列。


您是SQL注入敞开这个代码,这是非常高建议use PDO或以其他方式完全彻底逃避用户输入和use prepared statments字符串。

+0

可能还想添加关于SQL注入可能性的注释。 – chris85

+0

@ chris85是的,这是一个很好的观点,我将它添加到 – Martin

+0

愚蠢,我发布后,我意识到语法错误。谢谢。 – shelum