基于用户选项的PHP动态SQL SELECT语句

时间:2013-02-07 21:37:28

标签: php mysql sql select

首先,我想提一下,我一直在尝试和寻找解决方案,但到目前为止没有运气。我的问题如下:

我有一个包含几十行的MySQL数据库,我创建了一个jQuery网格来显示数据;这个页面已经有效了。 根据要求,我正在整理一个页面,人们可以从复选框中选择几个选项并过滤结果。这就是它的工作方式:

第1页将有3组复选框(名称,位置,语言),每组都有不同的选项([姓名:大卫,尼克等],[地点:纽约,华盛顿,孟买,伦敦,迈阿密], [语言:英语,西班牙语]。一旦用户选择了他的选项,它将提交一个类似这样的表格

grid.php位置=华盛顿和放大器;位置=孟买和放大器;语言=英语和放大器;名称=大卫

创建字符串很简单,但接收器将获取此参数然后放入数组然后创建SQL语句是我正在努力的地方。

我尝试过这样的事情:

$location= $_GET['location'];
$language= $_GET['language'];
$name= $_GET['name'];

if($location!=""){
    $where[] = 'location=';
    $where_args[] = $location;
}
//same code for the other 2 options

$where_clause = implode(' OR ', $where_args);

$sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC";

所有选项都不是必需的,因此查询需要接受可能设置或不设置值的可能性,因此最终可能会出现类似grid.php?language = English的内容。

我知道上面的代码不太有效,但如果有人能指出我正确的方向,我将不胜感激。

2 个答案:

答案 0 :(得分:5)

试试这个:

<?php
$location= $_GET['location'];
$language= $_GET['language'];
$name= $_GET['name'];

if($location!=""){
    $where[] = " `location` = '".mysql_real_escape_string($location)."'";
}
if($language!=""){
    $where[] = " `language` = '".mysql_real_escape_string($language)."'";
}
if($name!=""){
    $where[] = " `name` = '".mysql_real_escape_string($name)."'";
}
$where_clause = implode(' OR ', $where);
//same code for the other 2 options

$sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC";
?>

答案 1 :(得分:2)

你总是可以遍历$ _GET并使用值来获取键,所以:

foreach ($_GET as $key=>$val) {
   if ($val != "") {
      $where_args[] = "$key='$val'";
  }
} 
$where_clause = implode(' OR ', $where_args);

您可能希望比上面的示例做更好的验证,如果您需要对特定值执行检查,则可以添加select / case语句...