当我运行页面时会抛出此错误,但我不知道原因:
警告: 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;";
答案 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
。对于成功的SELECT
,SHOW
,DESCRIBE
或EXPLAIN
个查询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