如何解决mysqli_fetch_array()错误

时间:2015-12-07 09:39:31

标签: php mysql mysqli mysqli-multi-query

当我运行页面时会抛出此错误,但我不知道原因:

  

警告: mysqli_fetch_array()要求参数1为mysqli_result,   在第234行的C:\ wamp \ www \ SAMS \ record.php中给出的布尔值

这是我的疑问:

$data = "SELECT *, (SELECT SUM(studAtt_endTime - studAtt_startTime) FROM studentAttendance WHERE studAtt_status='0')
                FROM studentAttendance INNER JOIN student ON studentAttendance.student_stud_matric=student.stud_matric
                INNER JOIN course ON studentAttendance.course_course_code=course.course_code
                WHERE WHERE studentAttendance.course_course_code LIKE '%$_GET[course]%' GROUP BY student_stud_matric;";

4 个答案:

答案 0 :(得分:6)

您的查询有两倍'WHERE'。删除另一个。

答案 1 :(得分:1)

当您使用缩进对其进行正确格式化时,所有类型的代码都可以更好地读取和理解,如下所示:

$courseEscaped = mysql_real_escape_string($_GET[course]); $data = " SELECT *, ( SELECT SUM(studAtt_endTime - studAtt_startTime) FROM studentAttendance WHERE studAtt_status='0' ) AS studAttTime FROM studentAttendance AS sa INNER JOIN student AS s ON sa.student_stud_matric=s.stud_matric INNER JOIN course AS c ON sa.course_course_code=c.course_code WHERE sa1.course_course_code LIKE '%$courseEscaped%' GROUP BY student_stud_matric; ";

还在表名中使用别名来进行mysql查询。它们使代码更短,更便于阅读和理解。为所有字段命名,以便在脚本中更好地访问它们。

您的原始查询对于注射是不安全的,您总是应该逃避来自客户端或任何其他来源的任何内容。永远不要相信任何人。

顺便说一句,不推荐使用mysql_real_escape_string(),而是使用类似mysqli_real_escape_string()或PDO :: quote()的东西。

答案 2 :(得分:0)

对于mysqli::query(),返回的是:

失败时返回FALSE。对于成功的SELECTSHOWDESCRIBEEXPLAIN个查询mysqli_query()将返回mysqli_result个对象。对于其他成功的查询,mysqli_query()将返回TRUE。 上面的人解释了原因FALSE。对于某些PHP版本,在检查mysqli_result是否通过mysqli_result::$num_rows有任何行时应该注意。

答案 3 :(得分:0)

我使用dbSimple进行MySQL访问,它处理许多问题,并且非常简单而且舒适。 Dmitry Koterov,原始图书馆的作者是非常有经验的程序员,图书馆的工作做得非常好 - https://github.com/DmitryKoterov/DbSimple