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

标签 php mysql sql

我有一个 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;

您可以想象这不起作用,因为如果这些字段中的任何一个为空 - 查询就会失败(或者什么也不返回)。

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

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

最佳答案

只需检查变量是否包含值,如果包含,则像这样构建查询:

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

$query = "SELECT * FROM tableName";

if ($sql) {
    $query .= ' WHERE ' . implode(' AND ', $sql);
}
$stmt = $mysqli->prepare($query);

if ($parameters) {
    $stmt->bind_param(str_repeat('s', count($array), ...$parameters);
}
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_all(MYSQLI_ASSOC);

关于php - 使用 php 变量创建动态 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40327364/

相关文章:

PHP 7 session_regenerate_id 失败和 PDO 调用成员函数prepare() null

php - 如何根据特定的行值将行转换为列?

mysql - mysql 日期比较结果不正确

java - Hibernate 和 MySQL 管道破裂

mysql - mysql 上的分布式事务

SQL Server 查询 - 为什么会出现死锁?

javascript - 我想在当前视频结束后自动播放下一个视频

mysql - 选择与值组合关联的 ID

mysql - 将 sql 查询结果直接转换为图表的 X 轴和 Y 轴的最佳方法是什么

php - 从 JSON URL 解析数据