MySQL PHP sorgu soru

4 Cevap php

Tamam, ben burada bir sorun var ...

Bu PHP dosyası ajax açılır listelerden değerleri yolluyorum.

Şimdi ben bir şey değerleri ayarlamak sadece ben yapmak yönetilen bu değerleri kullanarak bir mysql veritabanı aramak istiyorum, ama ...

Bir göz atın:

     $query = "SELECT * FROM cars_db WHERE price BETWEEN '$cars_price_from' AND '$cars_price_to' AND year BETWEEN '$cars_year_from' AND '$cars_year_to' AND mileage BETWEEN '$cars_mileage_from' AND '$cars_mileage_to' AND gearbox = '$cars_gearbox' AND fuel = '$cars_fuel'";

kullanıcı herhangi bir "price_from" veya "year_from" seçmez ne varsa artık ... alanlar sadece isteğe bağlıdır, yani kullanıcı herhangi "adlı bir fiyat" veya "yıl" girmezse, o zaman kullanıcı TÜM araba göstermek istiyor ...

Her durum için bir sorgu deyimi yazmak zorunda ya da başka bir yolu var mı?

4 Cevap

Ben sadece bu yüzden ben fazladan VE bulunuyor eklemek gerekiyor olmadığını koşullar ekledi var hangi endişelenmenize gerek yok ve ben bir dizide benim koşullar koymak ve sonra sonunda implode dışında davethegr8 benzer bir şey yapmak.

Örneğin:

$sql = "SELECT * FROM car_db";

// an array to hold the conditions
$conditions = array();

// for price
if ($car_price_from > 0 && $car_price_to > $car_price_from) {
    $conditions[] = "(price BETWEEN '$cars_price_from' AND '$cars_price_to')";
}
elseif ($car_price_from > 0) {
    $conditions[] = "(price >= '$cars_price_from')";
}
elseif ($car_price_to > 0) {
    $conditions[] = "(price <= '$cars_price_from')";
}
else { 
    //nothing
}

// similar for the other variables, building up the $conditions array.

// now append to the existing $sql
if (count($conditions) > 0){
    $sql .= 'WHERE ' . implode(' AND ', $conditions);
}

Siz sadece PHP kodu parametreleri eksik algılamak ve uygun bir varsayılan doldurabilir. örneğin

if (!isset($cars_mileage_to))
    $cars_mileage_to = 500000;

Sen "nerede" your değişkenler "farklı yalnızca bir parçası" ekleyerek, sorgu sizi inşa edebilirsiniz.

Eğer mysql 5.x kullanıyorsanız ya da subselects kullanabilirsiniz:

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

girişini doğrulamak için unutmayın. Bazı lezzetli sql enjekte etmek, örneğin, kundakçı ile önemsiz bulunuyor.