php - 在数据表插件上的 mysql WHERE 子句上使用 GET 方法不起作用
问题描述
我正在使用数据表(https://datatables.net/)插件来生成数据。所有数据都来自enrollments
数据库表。
我无法找到问题所在。当我尝试使用GET
方法获取要在WHERE
子句上使用的变量时,出现错误。如果您需要更多代码,请告诉我。
file1: enrollment_select_statement.php
$sqlEnrollments = "SELECT e.enrollment_id, e.studentid, e.joiningdate, e.notes, e.termyearid,
s.student_id, s.firstname, s.lastname, s.section, s.standard AS studentstandard, s.status,
c.course_id, c.subject AS coursesubject, c.standard AS coursestandard, c.termyearid AS coursetermyearid,
b.name AS batchname,
t.total, t.name AS termname, t.startingdate, t.endingdate,
sc.name AS schoolname,
ty.currentyear, ty.nextyear,
tyc.currentyear AS currentyearforcourse, tyc.nextyear AS nextyearforcourse
FROM enrollments e
LEFT JOIN students s ON e.studentid = s.student_id
LEFT JOIN courses c ON e.courseid = c.course_id
LEFT JOIN batches b ON e.batchid = b.batch_id
LEFT JOIN terms t ON e.termid = t.term_id
LEFT JOIN termyears ty ON e.termyearid = ty.termyear_id
LEFT JOIN schools sc ON s.schoolid = sc.school_id
LEFT JOIN termyears tyc ON c.termyearid = tyc.termyear_id";
$resultEnrollments = mysqli_query($con, $sqlEnrollments);
上述文件包含在此页面中。
file2: enrollment_data.php
include 'database/db_enrollment/enrollment_select_statement.php';
$data = [];
foreach ($resultEnrollments as $row) {
$enrollmentNotes = $row['notes'];
$enrollmentJoiningDate = $row['joiningdate'];
...
$data[] = [
'term_name_year' => "<small>".$termName."<br> <span class='text-muted'>".termYearFunction($currentYear, $nextYear)."</span></small>",
'student_name' => $studentFirstname.' '.$studentLastname.'<br>'.$stdSecCondition,
...
];
}
echo json_encode(array('data' => $data));
这是最终文件js
file3: database_for_enrollment.js
$('#enrollmentTableForDataTable').DataTable({
ajax: {
url: 'enrollment_data.php'
},
columns:
[
{ data: 'term_name_year' },
{ data: 'student_name' },
{ data: 'course_subject_standard' },
{ data: 'enrollment_joiningdate' },
{ data: 'notes' },
{ data: 'status' },
{ "mData": function (data, type, dataToSet) {
var lnk = data.edit_hreflink;
var hrefO = "<a href='" + lnk + "'>";
var hrefC = "</a>";
return hrefO + 'Edit' + hrefC;
}},
],
});
让我解释
选项 1:
使用$id = 1
$id = 1
$sqlEnrollments = "SELECT e.enrollment_id, e.studentid, e.joiningdate, e.notes, e.termyearid,
...
WHERE e.termyearid = $id";
选项 2:
在语句中使用它,SELECT
但数字是硬编码的 forWHERE
子句
$sql = "SELECT * FROM termyears WHERE termyear_id = 1";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result);
$id = $row['termyear_id'];
$sqlEnrollments = "SELECT e.enrollment_id, e.studentid, e.joiningdate, e.notes, e.termyearid,
...
WHERE e.termyearid = $id";
选项3:不起作用
从$URLtyId
$_GET
$URLtyId = '';
if( isset( $_GET['tyId']) ) {
$URLtyId = $_GET['tyId'];
}
$sql = "SELECT * FROM termyears WHERE termyear_id = $URLtyId";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result);
$id = $row['termyear_id'];
$sqlEnrollments = "SELECT e.enrollment_id, e.studentid, e.joiningdate, e.notes, e.termyearid,
...
WHERE e.termyearid = $id";
当我尝试包含方法中的WHERE
子句时GET
。我得到这个错误。
Warning: Invalid argument supplied for foreach() in localhost\enrollment_data.php on line 15
{"data":[]}
解决方案
尝试将您的请求置于您的条件中:(例如)
if( isset( $_GET['tyId']) ) {
$URLtyId = $_GET['tyId'];
$sql = $bdd->query("SELECT * FROM termyears WHERE id = $URLtyId");
$reqRow = $sql->rowCount();
if($reqRow == 1){
while($f = $sql->fetch()){
echo $f["name"]
//your database row
}
}
}
推荐阅读
- javascript - 如何在 javascript 对象中捕获引用循环?
- c# - Windows Workflow Foundation - 反序列化程序无法加载要反序列化的类型,因为类型
- reactjs - 使用 react-router-dom 时延迟加载不起作用
- javascript - 在其他脚本完成更改 dom 时运行脚本
- node.js - 将大文件从 Google Cloud Function 上传到 Google Cloud Storage 失败
- javascript - Laravel-mix@6.0.10 出现未知错误 Uncaught DOMException: Failed to construction 'WebSocket'
- android - Flutter InAppWebView 摄像头/音频权限
- reactjs - 无法在 useEffect 挂钩中使用反应表单数据
- reactjs - Vue 2 TSX -> React TSX .. 如何让它们玩得更好
- sql - 你能在 DENSE_RANK() OVER PARTITION 中得到两个相同的 order_position(或行号)吗?