php - 关于路由飞行框架php的问题
问题描述
嗨,我正在使用飞行框架进行路由,我对以下代码示例有疑问。你能帮帮我吗)
功能:
function getCoursesByStudents($students) {
// 1. connection to dbms/db
$mysqli = new mysqli('localhost', 'root', '....', 'university');
if ($mysqli->connect_errno) {
die($mysqli->connect_error);
}
// 2. query
$query = "SELECT cs.student_id, c.id, c.title FROM courses_students cs, courses c WHERE cs.course_id = c.id AND cs.student_id = " . $students;
$resulthandle = $mysqli->query($query);
if (!$resulthandle) {
die($mysqli->error);
}
// 3. prepare and return result
$resultforclient = array();
while ($result = $resulthandle->fetch_assoc()) {
$resultforclient[] = $result;
}
$resulthandle->close();
return $resultforclient;
}
路由:
Flight::route('/students/@id/courses', function($id){
$result = getCoursesByStudents($id);
echo json_encode($result);
});
请您逐步向我解释以下示例:
http://localhost/university/backend/flight-master/students/1/courses
我最大的问题是cs.studen_ id .. --> = " . $students; 后面的sql查询部分的理解。
查询将如何采用 mysql 格式?
我是新手,所以请用简单的方法向我解释一下..非常感谢
解决方案
$students
是一个参数;getCoursesByStudents()
当您调用 时getCoursesByStudents($id)
,您将传递$id
给该函数,并将 的值$id
传递给$students
变量。
$id
本身由 决定Flight::route('/students/@id/courses'
,其中@
表示 Flight 中的命名参数,它是从 URL 中的任何内容中获取的。因此,@id
成为$id
,并最终$students
。
这被传递到查询中:
$query = "SELECT cs.student_id, c.id, c.title FROM
courses_students cs, courses c WHERE cs.course_id = c.id AND cs.student_id = 1"
但是,这是以不安全的方式完成的,并且会让您面临相当严重的安全漏洞,这将允许学生查看其他学生的信息。
与其将 ID 直接传递到 SQL 语句中(使用... cs.student_id = " . $students
),不如使用准备好的语句来参数化此查询:
$query = "SELECT cs.student_id, c.id, c.title FROM
courses_students cs, courses c WHERE cs.course_id = c.id AND cs.student_id = ?";
$query->bind_param("s", $students);
$query->execute();
推荐阅读
- bash - Cygwin bash shell 中的 for 循环后跟“>”
- php - 在一个 process.php 文件中提交第二个查询之前,如何查询 SQL 数据库?
- c++ - 是什么让 Boost `interval_map` 忽略插入?
- html - 如何通过 html 文件显示 MySQL 数据库中的内容?
- java - 调试内存泄漏 - org.hibernate.engine.StatefulPersistenceContext
- powerbi - 仅当另一列具有值 DAX 时 PowerBi 才计算日期
- c - 每次从函数返回时,我可以重置全局变量的值吗
- python - 无法在 matplotlib 中设置 plt.xticks
- css - 即使使用旧前缀,Flex 属性在 IE 10 中也不起作用
- python - 在 numpy 中从 3d 获取特定的 2d 数组