【发布时间】:2019-10-01 18:03:15
【问题描述】:
我有一个包含学生记录的数据库,大约有 50 列左右,所有这些都需要可搜索。我熟悉如何通过附加字段来构建动态搜索查询。我似乎找不到任何关于使用本质上是动态的准备好的语句来搜索 MySQL 数据库的示例。例如,在搜索时,您只会输入需要搜索的字段,那么,如何根据用户输入构建动态准备语句?
这是一个如何在没有准备好的语句的情况下执行此操作的示例,但是这很容易发生 SQL 注入。我需要用函数“清理”每个变量。但是,使用准备好的语句会更加安全。
function clean($con,$var){
$var = trim($var);
$var = strtolower($var);
$var = mysqli_real_escape_string($con,$var);
return $var;
}
if(isset($_REQUEST['sub'])){
if(isset($_REQUEST['student_fname'])){
$student_fname = null;
if($_REQUEST['student_fname'] != ''){
$student_fname = '&& `student_fname` = \''.clean($con,$_REQUEST['student_fname']).'\' ';
}
}
if(isset($_REQUEST['student_lname'])){
$student_lname = null;
if($_REQUEST['student_lname'] != ''){
$student_lname = '&& `student_lname` = \''.clean($con,$_REQUEST['student_lname']).'\' ';
}
}
$sql = "SELECT * FROM `student_records`
WHERE 1=1
$student_fname
$student_lname
ORDER BY class ASC, student_lname ASC";
echo $sql;
}
【问题讨论】:
-
注意:最终会有更多的字段,这个例子只显示1
-
@mohit 该示例未显示如何动态构建准备好的语句..?
-
如何在查询中使用表单字段值?作为 ANDed 值或 ORed 值?无论如何,您都需要检查每个可能输入的表单值,并在检查每个可能的输入时构建查询字符串。请edit您的问题,并附上一个示例,说明您的查询将如何包含至少 2 或 3 个值。
-
@Dave 它们将是 AND 值,我已经更新了示例
标签: php mysql mysqli prepared-statement