Ben bir soru ben senin için oldukça benzer olduğunu düşünüyorum, diğer gün yanıtladı:
PHP: prepared statement, IF statement help needed
Fikir uygulama girişine uygun gerektiği gibi terimleri toplamak için kodunuzda koşullu mantığı kullanmaktır. O zaman doğru SQL ifadesi üreten böyle bir şekilde onları bir araya.
Bu dinamik SQL ifadesi oluşturmak için bazı uygulama fonksiyonunu gerek yok, ve mümkün olduğunca kısa ve öz yapmak için teknikler vardır. Gerçekten birçok olası arama terimleri varsa, uzun bir fonksiyonu ile bitirmek olabilir. Ama ne oldu? Karmaşık girişleri varsa, onlarla başa çıkmak için karmaşık kodu gerekir sürpriz olmamalıdır.
Yorumlarınız Re:
url.com? location = gb & color = 3 & saç = 4
Tamam, sen kadar üç girişe sahiptir ve dinamik bu bir SQL sorgusu oluşturmak için var. En sondan başlar ve geriye doğru çalışalım. Sonuçta böyle bir SQL ifadesi istiyorum:
WHERE (location = 'gb') AND (color = 3) AND (hair = 4)
Eğer üç dönem bir dizi varsa, implode()
function. But you may also have fewer than three. You can handle any number of terms by putting however many terms you have into an array and imploding them with AND
her dönem arasında PHP kullanarak bunları birlikte katılabilirsiniz:
$where_array = array(
"(location = 'gb')",
"(color = 3)",
"(hair = 4)"
);
$where_expr = "WHERE " . implode(" AND ", $where_array);
Peki bu terimler ile dizi oluşturabilirim? Sizin app mevcut talebi mevcut her giriş için koşullu diziye eklemek için kod yazarak:
$where_array = array();
if (array_key_exists("location", $_GET)) {
$location = mysql_real_escape_string($_GET["location"]);
$where_array[] = "(location = '$location')";
}
if (array_key_exists("color", $_GET)) {
$color = mysql_real_escape_string($_GET["color"]);
$where_array[] = "(color = '$color')";
}
if (array_key_exists("hair" $_GET)) {
$hair = mysql_real_escape_string($_GET["hair"]);
$where_array[] = "(hair = '$hair')";
}
Bütün bunlar yapıldıktan sonra, dizi sıfır ila üç öğesi vardır. Bu bir veya daha fazla varsa, aksi takdirde atlamak, daha önce gösterildiği gibi bir WHERE
tümcesi oluşturmak istiyorum.
$where_expr = '';
if ($where_array) {
$where_expr = "WHERE " . implode(" AND ", $where_array);
}
Sonra temel SQL sorgusu için $where_expr
append.
$sql .= $where_expr
Ilgili şeyler $params
yerine bir SQL ifadesi içine dinamik değerler de dahil olmak üzere alternatif bir yöntem sorgu parametreleri, için mysql_real_escape_string()
. Bu zorunlu değildir (ve aslında PHP'nin eski mysql uzatma sorgu parametreleri desteklemiyor) ama ben PDO geçiş tavsiye yüzden bu özelliği kullanabilirsiniz. Burada örneğe bakın: PDO::prepare()
a>.