Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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_Filter_Query String - Fatal编程技术网

如何在PHP/MySQL中使用查询字符串过滤结果集?

如何在PHP/MySQL中使用查询字符串过滤结果集?,php,mysql,filter,query-string,Php,Mysql,Filter,Query String,我正在构建一个类似于的事件页面 用户可以使用查询字符串中传递的参数按日期、类别等筛选事件 我的问题是,构造代码(查询、循环)的最佳方式是什么,以允许这些不同的查询类型,并可能将它们组合在一起(例如,按日期和类别筛选) 我正在寻找如何创建此类页面(可以使用查询字符串筛选的结果集)的实用示例/参考资料。构建自定义数据库查询的常见模式: $sql = 'SELECT * FROM foo '; $sql .= 'WHERE 1 '; if (array_key_exists('category',

我正在构建一个类似于的事件页面

用户可以使用查询字符串中传递的参数按日期、类别等筛选事件

我的问题是,构造代码(查询、循环)的最佳方式是什么,以允许这些不同的查询类型,并可能将它们组合在一起(例如,按日期和类别筛选)


我正在寻找如何创建此类页面(可以使用查询字符串筛选的结果集)的实用示例/参考资料。

构建自定义数据库查询的常见模式:

$sql  = 'SELECT * FROM foo ';
$sql .= 'WHERE 1 ';

if (array_key_exists('category', $_GET)) {
    $sql .= sprintf('AND category_id = %d ', intval($_GET["category"]));
}

if (array_key_exists('date', $_GET)) {
    $sql .= sprintf('AND date = "%s" ', mysql_real_escape_string($_GET["date"]));
}

// and so on...
或者,使用PDO:

$params = array();

$sql  = 'SELECT * FROM foo ';
$sql .= 'WHERE 1 ';

if (array_key_exists('category', $_GET)) {
    $sql .= 'AND category_id = ? ';
    $params[] = $_GET["category"];
}

if (array_key_exists('date', $_GET)) {
    $sql .= 'AND date = ? ';
    $params[] = $_GET["date"];
}

// and so on...

$stmt = $db->prepare($sql);
$stmt->execute($params);

如果需要对数据库结果执行其他筛选,只需使用循环将数据复制到目标数组,并在遇到应从结果中忽略的行时继续执行。

构建自定义数据库查询的常见模式:

$sql  = 'SELECT * FROM foo ';
$sql .= 'WHERE 1 ';

if (array_key_exists('category', $_GET)) {
    $sql .= sprintf('AND category_id = %d ', intval($_GET["category"]));
}

if (array_key_exists('date', $_GET)) {
    $sql .= sprintf('AND date = "%s" ', mysql_real_escape_string($_GET["date"]));
}

// and so on...
或者,使用PDO:

$params = array();

$sql  = 'SELECT * FROM foo ';
$sql .= 'WHERE 1 ';

if (array_key_exists('category', $_GET)) {
    $sql .= 'AND category_id = ? ';
    $params[] = $_GET["category"];
}

if (array_key_exists('date', $_GET)) {
    $sql .= 'AND date = ? ';
    $params[] = $_GET["date"];
}

// and so on...

$stmt = $db->prepare($sql);
$stmt->execute($params);

如果需要对数据库结果进行额外筛选,只要使用循环将数据复制到目标数组,并在遇到应从结果中省略的行时继续执行。

首先,如果要使用查询字符串中的数据运行查询,则需要使用准备好的语句/存储过程来确保安全。另外,由于MySQL 5.1.17查询缓存与准备好的语句一起工作

准备好的语句可以像PHP中的普通查询一样构建,将特定查询所需的查询的各个部分连接在一起

为了避免必须在“和”之间放置的麻烦,您可以将每个语句分配给要使用的对象数组,然后将它们内爆:

if(use_date) $sql_where[] = "date = ?";
if(use_category) $sql_where[] = "category = ?";
$sql = $sql . implode(" AND ", $sql_where);

重复此过程(或同时执行此过程)以插入查询所需的数据字段。

首先,如果要使用查询字符串中的数据运行查询,则需要使用准备好的语句/存储过程以确保安全。另外,由于MySQL 5.1.17查询缓存与准备好的语句一起工作

准备好的语句可以像PHP中的普通查询一样构建,将特定查询所需的查询的各个部分连接在一起

为了避免必须在“和”之间放置的麻烦,您可以将每个语句分配给要使用的对象数组,然后将它们内爆:

if(use_date) $sql_where[] = "date = ?";
if(use_category) $sql_where[] = "category = ?";
$sql = $sql . implode(" AND ", $sql_where);
重复该过程(或同时执行),以插入查询所需的数据字段