PHP / SQL查询返回Nothing

时间:2016-02-28 20:45:17

标签: php mysql

尝试查询课程,教师,课外和学生专业的列表但是当我运行查询时,我没有得到任何结果。

//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查询现在有效了。

1 个答案:

答案 0 :(得分:4)

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

您正在寻找名称$name,但您只是设置名为$student_name

的变量

因此,您实际上在Students表中查找具有name=''的值。

另外

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

您正在查找studentid列值,但会根据student表中student列的数据对其进行检查。这看起来像您尝试使用varchar类型字符值(studentid)检查数字索引字段(student)。

更多详情:

你有一行WHERE s.studentid='$student_id[0]'";完全取得当前SQL查询的值:

名为student

student_id表格列是 s.student_id ,您要根据值$sudent_id[0]检查此值,该值来自上面的查询值student表格中的student列。这意味着你将永远找不到任何结果,因为它正在比较几乎肯定包含不同值的两列。

您对此代码的SQL注入非常开放,强烈建议您use PDO或完全彻底地从用户输入和use prepared statments转义字符串。