Php 有没有一种方法可以为sql查询提供一个可调整的预处理语句
所以我尝试创建一个HTML前端,它可以使用文本字段来搜索SQL数据库。但是可以搜索多个列,许多列包含数字或字母。用户可以一次搜索一个或多个列 在我自己的测试服务器中,我尝试将可能的查询分解为下拉列表;并有开关箱来处理选择。但这并不奏效。我的最终目标是让textbox承载所有查询数据,并将其传递给一个准备好的语句Php 有没有一种方法可以为sql查询提供一个可调整的预处理语句,php,mysql,Php,Mysql,所以我尝试创建一个HTML前端,它可以使用文本字段来搜索SQL数据库。但是可以搜索多个列,许多列包含数字或字母。用户可以一次搜索一个或多个列 在我自己的测试服务器中,我尝试将可能的查询分解为下拉列表;并有开关箱来处理选择。但这并不奏效。我的最终目标是让textbox承载所有查询数据,并将其传递给一个准备好的语句 所以我的问题,;是否有一种方法使准备好的语句具有适应性,以处理单个搜索案例或多个搜索案例。例如,其中第1列类似于查询1(第2列类似于查询2) 这可能有点冗长,我相信有更好的方法可以循环或
所以我的问题,;是否有一种方法使准备好的语句具有适应性,以处理单个搜索案例或多个搜索案例。例如,其中第1列类似于查询1(第2列类似于查询2) 这可能有点冗长,我相信有更好的方法可以循环或排列*Col1文本框必须有数据,这是由于“和”,我希望这有帮助
<form action="#" method="post">
Col1:<br>
<input type="text" name="Col1"><br>
Col2:<br>
<input type="text" name="Col2"><br>
Col3:<br>
<input type="text" name="Col3"><br>
Col4:<br>
<input type="text" name="Col4"><br>
<input type="submit" name="search" value="Search"><br>
</form>
<br />
<br />
<?php
$SQL_Claus = "";
if (!empty($_POST['Col1'])){
$Col1 = $_POST['Col1'];
$SQL_Claus = $SQL_Claus . " Col1 LIKE " . $Col1;
}
if (!empty($_POST['Col2'])){
$Col2 = $_POST['Col2'];
$SQL_Claus = $SQL_Claus . " AND Col2 LIKE " . $Col2;
}
if (!empty($_POST['Col3'])){
$Col3 = $_POST['Col3'];
$SQL_Claus = $SQL_Claus . " AND Col3 LIKE " . $Col3;
}
if (!empty($_POST['Col4'])){
$Col4 = $_POST['Col4'];
$SQL_Claus = $SQL_Claus . " AND Col4 LIKE " . $Col4;
}
$SQL_Statement = "SELECT * FROM TABLE WHERE ".$SQL_Claus;
echo $SQL_Statement;
?>
Col1:
Col2:
Col3:
Col4:
这是一个基本概念,显然您需要自己进行验证和清理。在html中,使用数组保存所有表单值:
<form action="#" method="post">
Col1:<br>
<input type="text" name="database[column1]"><br>
Col2:<br>
<input type="text" name="database[column2]"><br>
Col3:<br>
<input type="text" name="database[column3]"><br>
可以使用此数据库查询获取表的列列表。然后使用array\u intersect\u key
可以筛选出已提交但表中不存在的名称和列名
从information_schema.columns中选择column_name,其中table_name='table'代码>不要让用户发送您要连接到查询中的SQL。但是,只要确保列名来自列表,而不是user input.PS,就可以根据用户参数按需构建查询。没有适当的安全措施,文本字段Col1可能需要JS。
$input = $_POST['database']; // Assign all form variables to $input
$input = array_filter($input, 'strlen'); // Remove any form fields which were submitted with empty values
$where = implode(' AND ', (array_map(function($a){return "'$a' LIKE ?";}, array_keys($input)))); // Assemble your list of WHERE clauses
$statement = $dbo->prepare("SELECT * FROM table WHERE $where");
$statement->execute(array_values($input)); // Execute statement with corresponding variables