从动态选择框构造mySQL查询

时间:2015-01-13 20:45:26

标签: javascript php jquery mysql

我已经能够使用选择框构建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);

一切都很好。我在这个插图中混淆了一些变量,但这不是问题。这将返回用户从选择中选择的属性的计数。根据用户在上一个选择中选择的内容动态生成选择。

如果我希望用户能够选择更多属性来添加到查询中,该怎么办?因此,例如,与年龄超过40岁的数据库(用户)中的条目数量相比,他们可以像年龄超过40岁,已婚并生育孩子的用户那样增加更多。

我考虑过基本上添加一个选项来添加另一组选择框(例如,单击“+”并出现新的设置),但我很快意识到我无法弄清楚有多少选择在那里以及创建查询的逻辑方法。

允许用户在单个mySQL查询中选择(理论上)无限数量的属性的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我会使用HTML <select> & <option>标记来显示各种SQL条件运算符(AND, OR, >, <, =, !=)以及字段/表名,然后将它们连接在一起以构建查询。

如评论中所述,您可以使用name="checkbox[]"等数组功能,并将其作为HTML表单(POST或GET)提交,以简化连接。

您将要转义并清理发送到数据库的任何内容以避免SQL注入,因为HTML页面可以在客户端编辑。如果没有清理,精明的用户就可以访问整个数据库。这可以简单到验证数组内容是否与实际表名称或其中一个条件运算符匹配,然后丢弃它是否匹配。使用mysqli::escape_stringhttp://php.net/manual/en/mysqli.real-escape-string.php)转义也是一个好主意。

答案 1 :(得分:0)

在我能够弄清楚一些事情后,我最终不得不重做这个问题。以下是我的进展情况,并查看接受的答案,看看这一切是如何一起完成的:

Create array for PDO from variables passed from jquery