所以我想创建一个可以使用文本字段搜索SQL数据库的HTML前端。但是可以搜索多个列,以及包含数字或字母的许多列。用户可以一次搜索一个或多个列。
在我自己的测试服务器中,我尝试将可能的查询分解为下拉列表;并有切换案例来处理选择。但这没效果。我的最终目标是让文本框托管所有查询数据,并将其传递给准备好的语句
所以我的问题;有没有办法使一个准备好的语句适应,处理单个搜索案例或多个搜索案例。例如。 WHERE column1 LIKE query1(AND column2 LIKE query2)。
答案 0 :(得分:1)
这是一个基本概念,显然你需要自己进行验证和消毒等。在你的html中使用一个数组来保存所有的表单值:
A.divisions = tuple(divisions)
然后处理该数组以准备查询
<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>
您可以使用此数据库查询来获取表的列列表。然后使用$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
,您可以过滤掉已提交但在表中不存在的列名
array_intersect_key
答案 1 :(得分:0)
这可能是冗长的,我相信有更好的方法可以将它循环或阵列。 *由于“AND”,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;
?>