Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php变量创建动态mysql查询_Php_Mysql_Sql_Ajax - Fatal编程技术网

使用php变量创建动态mysql查询

使用php变量创建动态mysql查询,php,mysql,sql,ajax,Php,Mysql,Sql,Ajax,我有一个html表,它加载mySQL数据库表中的所有内容。我有一些与mySQL表的列相关的下拉列表——当用户选择其中一个下拉列表时,它使用AJAX查询数据库 我需要弄清楚如何动态构建查询,因为有时下拉列表将为空(即,它们不希望按该列过滤) 最好的方法是什么 目前我有这样的想法: $stationFilter = $_GET['station']; $verticalFilter = $_GET['vertical']; $creativeFilter = $_GET['c

我有一个html表,它加载mySQL数据库表中的所有内容。我有一些与mySQL表的列相关的下拉列表——当用户选择其中一个下拉列表时,它使用AJAX查询数据库

我需要弄清楚如何动态构建查询,因为有时下拉列表将为空(即,它们不希望按该列过滤)

最好的方法是什么

目前我有这样的想法:

    $stationFilter = $_GET['station'];
    $verticalFilter = $_GET['vertical'];
    $creativeFilter = $_GET['creative'];
    $weekFilter = $_GET['week'];    

    $result = mysql_query("SELECT * FROM $tableName WHERE STATION_NETWORK = '$stationFilter' AND VERTICAL = '$verticalFilter' AND CREATIVE = '$creativeFilter'  AND WK = '$weekFilter'");   
    $data = array();
    while ($row = mysql_fetch_row($result) )
        {
        $data[] = $row;
        }   
    $finalarray['rowdata'] = $data;
你可以想象,如果这些字段中有一个是空的,那么查询就会失败(或者什么也不返回)

显然,如果某些变量是空的,那么创建这样一个“静态”查询确实会很困难


动态创建该查询的最佳方法是什么,以便它只输入非空的查询并添加到查询中,以便它能够成功完成并显示适当的数据?

只需检查变量是否包含值,如果包含值,则按如下方式构建查询:

unset($sql);

if ($stationFilter) {
    $sql[] = " STATION_NETWORK = '$stationFilter' ";
}
if ($verticalFilter) {
    $sql[] = " VERTICAL = '$verticalFilter' ";
}

$query = "SELECT * FROM $tableName";

if (!empty($sql)) {
    $query .= ' WHERE ' . implode(' AND ', $sql);
}

echo $query;
// mysql_query($query);
但最好是在GET中按表名行; $\u GET['STATION\u NETWORK']--有些像这样

then you make
foreach ($_GET as $key => $value)
{
    if ($value != '')
    { $filter[] = $key.' = '.$value;}
}
或尝试

$filter = array('STANTION_NETWORK' => $_GET['station'],
                'VERTICAL' => $_GET['vertical'],
                 'CREATIVE'  => $_GET['creative'],
                 'WK' => $_GET['week']);
$query_array = array();

 foreach ($filter as $key => $value)
{
    if ($value != '')
    { $query_array[] = $key.' = '.$value;}
}
$query = 'SELECT * FROM $tableName WHERE '.implode(' AND ', $query_array);
$result = mysql_query($query);

当下拉列表为空时,为什么不回显您的查询以查看有什么问题?不要使用mysql\u查询,它已被弃用。此外,您还可以使用sql注入。现在我只关心如何使其运行。这是专门为内联网设计的,目的是让内联网正常工作。它永远看不到外部世界。谢谢你的关心,这是我知道的,但我想看看我是否能让这一切顺利进行。我曾经考虑过类似的事情——但是在哪里呢?这意味着该声明必须包括第一个声明的位置,但包括所有后续声明的位置。最好的方法是检查
$sql
是否包含任何内容。如果有,请使用它,但在使用
$sql
Perfect之前添加单词
WHERE
。太棒了-这真的很有帮助!谢谢到处都是SQL注入
$filter = array('STANTION_NETWORK' => $_GET['station'],
                'VERTICAL' => $_GET['vertical'],
                 'CREATIVE'  => $_GET['creative'],
                 'WK' => $_GET['week']);
$query_array = array();

 foreach ($filter as $key => $value)
{
    if ($value != '')
    { $query_array[] = $key.' = '.$value;}
}
$query = 'SELECT * FROM $tableName WHERE '.implode(' AND ', $query_array);
$result = mysql_query($query);