【问题标题】:PHP/SQL Query Returns NothingPHP/SQL 查询不返回任何内容
【发布时间】:2016-02-28 20:45:16
【问题描述】:

尝试查询班级、教师、课外活动和学生专业的列表,但运行查询时没有得到任何结果。

//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 查询现在可以工作了,谢谢。

【问题讨论】:

  • print_r( $student_id); chk 这个
  • 在第一个查询中,您将学生的 ID 称为 SELECT student FROM,而在第二个查询中,您使用的是 s.studentid,即 students AS s,那么正确的字段是什么?您的第一个或第二个查询是错误的。
  • 如果查询在 DB 界面中不起作用,这不是 PHP 问题,而是 SQL/mysql 问题。 DB长啥样,能不能提供个sqlfiddle?

标签: php mysql


【解决方案1】:
 $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 类型的字符值 (student) 检查数字索引字段 (studentid)。


更多详情:

您有WHERE s.studentid='$student_id[0]'"; 行,它完全从您当前的 SQL 查询中获取值是:

student 名为 student_id 的表列是 s.student_id 并且您正在对照值 $sudent_id[0] 进行检查,该值来自上面的查询中的 student 列的值student 表。这意味着您将永远找不到任何结果,因为它正在比较几乎可以肯定包含不同值的两列。


您对这段代码上的 SQL 注入持开放态度,强烈建议您使用 use PDO 或以其他方式完全从用户输入和 use prepared statments 中转义字符串。

【讨论】:

  • 可能还想添加关于 SQL 注入可能性的注释。
  • 傻了,我发这个后才发现语法错误。谢谢。
  • @shelum 我很高兴它现在可以工作,但是代码看起来仍然无法正常工作,因为您比较了 studentstudentid 列中的值,您能解释一下吗?干杯
  • students 是表格,studentid 是学生 ID。我编辑了一个错字。这就是我为使查询正常工作而解决的问题。
  • 好的。当您发现拼写错误或修复您的问题以只是更新您的原始问题时,这是一个好主意,因为这反过来又使您不清楚您在问什么,也不清楚我的答案在解释什么,最好的方法是编辑您的问题并在底部添加一条说明您如何解决问题的注释,干杯:-) @shelum
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2012-04-14
  • 2020-09-25
  • 1970-01-01
相关资源
最近更新 更多