如何解决带内部连接SQL语句的预准备语句中的SQL
我的查询正在工作,但我不知道如何将其放入准备好的语句中 这是我的查询(有效)
SELECT P.first_name,P.middle_name,P.last_name,P.lrn,P.section
FROM students P INNER JOIN student_load C ON P.lrn = C.lrn
WHERE subject_code = 12332654
这是我的准备好的语句(我是准备好的语句的新手,所以我不太了解)
function get_total_all_records()
{
include('../config.php');
//IM NOT SURE IF THE PROBLEM IS HERE($statement)
$statement = $connection->prepare("SELECT P.first_name,P.section
FROM students P
INNER JOIN student_load C ON P.lrn = C.lrn");
$statement->execute();
$result = $statement->fetchAll();
return $statement->rowCount();
}
$query = '';
$output = array();
// OR IF THE PROBLE IS HERE($query)
$query = "SELECT P.first_name,P.section
FROM students P INNER JOIN student_load C ON P.lrn = C.lrn
WHERE subject_code = 12332654";
if(isset($_POST["search"]["value"])){
$query .= 'AND ( lrn LIKE "%'.$_POST["search"]["value"].'%"
OR teacher LIKE "%'.$_POST["search"]["value"].'%"
OR sem LIKE "%'.$_POST["search"]["value"].'%" )';
}
解决方法
准备查询的要点之一是,您可以为要用数据替换的零件使用参数。这有助于保护您免受SQL Injection Attack的影响,{{3}}不会将变量连接到字符串中。
由于您的第一个查询不需要参数,因此可以很高兴地使用简单的->query()
运行,但是第二个查询最好使用准备和执行运行
$params = [':subjcode'=>$subject_code];
$query = "SELECT P.first_name,P.middle_name,P.last_name,P.lrn,P.section
FROM students P INNER JOIN student_load C ON P.lrn = C.lrn
WHERE subject_code = :subjcode ";
if(isset($_POST["search"]["value"])){
$query .= 'AND ( lrn LIKE :s1
OR teacher LIKE :s2
OR sem LIKE :s3 )';
$params = array_merge($params,[':s1'=> '%' . $_POST["search"]["value"] . '%'],[':s2'=> '%' . $_POST["search"]["value"] . '%'],[':s3'=> '%' . $_POST["search"]["value"] . '%']
);
}
$stmt = $connection->prepare($query);
$stmt->execute($params);
请注意,我还在
:subjcode ";
之后添加了一个空格,该空格在您的原始查询中丢失了
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。