我建立類似的活動頁面last.fm/events如何使用PHP/MySQL中的查詢字符串過濾結果集?
用戶可以過濾按日期,類別等事件,這些參數在查詢字符串
我的問題是過去了,什麼是構建最好的方式你代碼(查詢,環路),以允許這些不同的查詢類型,並有可能(按日期和類如過濾)
我在尋找如何使這種類型的網頁的實際例子/引用它們組合(一個可以使用查詢字符串過濾的結果集)。
我建立類似的活動頁面last.fm/events如何使用PHP/MySQL中的查詢字符串過濾結果集?
用戶可以過濾按日期,類別等事件,這些參數在查詢字符串
我的問題是過去了,什麼是構建最好的方式你代碼(查詢,環路),以允許這些不同的查詢類型,並有可能(按日期和類如過濾)
我在尋找如何使這種類型的網頁的實際例子/引用它們組合(一個可以使用查詢字符串過濾的結果集)。
用於構建自定義數據庫查詢的常見模式:
$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);
如果需要對數據庫做的結果進一步進行過濾,只使用一個循環來複制將數據發送到目標數組,並且每當遇到應該從結果中省略的行時,都將返回continue
。
首先,如果您使用查詢字符串中的數據來運行查詢,您將希望使用預準備語句/存儲過程來實現安全性。另外,因爲MySQL 5.1.17查詢緩存與預處理語句一起工作。
準備好的語句可以像PHP中的普通查詢一樣建立起來,將查詢所需的各個部分連接在一起。
爲了避免不得不把「AND的插圖中,你可以每個語句分配到的事物的陣列使用,然後爆他們的煩惱:
if(use_date) $sql_where[] = "date = ?";
if(use_category) $sql_where[] = "category = ?";
$sql = $sql . implode(" AND ", $sql_where);
重複的程序(或相同做時間)來插入查詢所需的數據字段。