小编典典

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

sql

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

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

第1页上有3组复选框(名称,位置,语言),每组都有不同的选项([名称:David,Nick等],[位置:纽约,华盛顿,孟买,伦敦,迈阿密],[语言:
[英文,西班牙文]。一旦用户选择了自己的选项,它将提交包含以下内容的表格

grid.php?location = Washington&location =孟买&language = English&name = David

创建字符串很容易,但是接收器将使用此参数,然后将其放置在数组中然后创建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之类的东西。

我知道上面的代码无法正常工作,但是如果有人可以向我指出正确的方向,我将不胜感激。


阅读 223

收藏
2021-03-17

共1个答案

小编典典

试试这个:

<?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";
?>
2021-03-17