我已经能够使用选择框构建 mySQL 查询。像这样从 ajax 开始到 PHP。
html/js(相关部分)
var call = true;
switch(parseInt($(this).val())) {
case 1:
cat_code ="ager";
sortv = "database_percent";
sorto = "asc";
break;
case 2:
cat_code ="ager";
sortv = "database_percent";
sorto = "desc";
break;
default:
cat_code ="ager";
sortv = "value";
sorto = "asc";
break;
}
if(call) {
$.ajax({
url: 'all_get_2.php',
type: 'GET',
dataType: 'JSON',
data: {cat_code: cat_code, sortvalue: sortv ,sortorder:sorto},
success: function(data) {
//stuff
}
})
PHP(相关部分...只是一个例子)
$whereCategory = isset($_GET['cat_code'])? "{$_GET['cat_code']}" : '';
$sortvalue = isset($_GET['sortvalue'])? "{$_GET['sortvalue']}" : '';
$sortorder = isset($_GET['sortorder'])? "{$_GET['sortorder']}" : '';
$sql = "select count(guid) from full_db2 where '{$whereCategory}' = '{$sortvalue}'' and example = '{$sortorder};";
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result);
一切顺利。我在这个插图中混淆了一些变量,但这不是问题所在。这将返回用户从 selects 中选择的属性的计数。选择是根据用户在之前的选择中选择的内容动态生成的。
如果我希望用户能够选择更多属性以添加到查询中,该怎么办?因此,例如,与其查找数据库(用户)中年龄超过 40 岁的条目数,他们可以添加更多信息,例如年龄超过 40 岁且已婚并有 child 的用户。
我基本上考虑添加一个选项来添加另一组选择框(例如,单击“+”并出现新的一组),但我很快意识到我无法弄清楚那里有多少选择以及创建查询的逻辑方法。
允许用户选择(理论上)无限数量的属性以在单个 mySQL 查询中构建的最佳方法是什么?
最佳答案
我会使用 HTML <select> & <option>
标记以显示各种 SQL 条件运算符 ( AND, OR, >, <, =, !=
) 以及您的字段/表名称,然后将它们连接在一起以构建您的查询。
如评论中所述,您可以利用 name="checkbox[]"
等数组功能并将其作为 HTML 表单(POST 或 GET)提交以简化连接。
您需要转义并清理发送到数据库的任何内容,以避免 SQL 注入(inject),因为 HTML 页面可以在客户端进行编辑。如果不进行清理,精明的用户将可以访问您的整个数据库。这可以像验证数组内容是否与实际表名或条件运算符之一匹配一样简单,如果不匹配则丢弃。使用 mysqli::escape_string
转义( http://php.net/manual/en/mysqli.real-escape-string.php ) 也是一个好主意。
关于javascript - 从动态选择框构造 mySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27931177/