PHP mysql - ... AND kolon = 'bir şey' ...?

5 Cevap php

Bir sütun "şey" olup olmadığını kontrol için herhangi bir yolu var mı? Nedeni i almak URL'den bir kimlik, ve sonra sql algoritması aracılığıyla geçer ve sonucunu gösteren bir searchfunction olması. (?) Bu URL "işlevi" doldurulur değilse Ama, bu sadece arar:

...AND column=''...

ve bu hiç bir sonuç vermez. Ben bir "%" kullanarak denedim, ama bu bir şey yapmaz.

Herhangi bir fikir?

İşte sorgu var:

mysql_query("SELECT * FROM filer 
             WHERE real_name LIKE '%$searchString%' 
                   AND public='1' AND ikon='$tab' 
                   OR filinfo LIKE '%$searchString%' 
                   AND public='1' 
                   AND ikon='$tab' 
             ORDER BY rank DESC, kommentarer DESC");

Sorun "ikon =''" dir ...

5 Cevap

and ikon like '%' "şey" içeren sütun için kontrol. O like Ayrıca hiçbir joker ile edebi dizeleri karşılaştırma için kullanılabilir, böylece, sen like kullanmak için SQL kısmını değiştirirseniz o zaman değişkeni önceden ayarlanmış olabilir Not { [(3)]} ve tüm ayarlanır.

Başkasının aşağıda belirtilen ancak, SQL enjeksiyon saldırıları sakının. Ben her zaman güçlü insanlar mysqli ve hazırlanmış sorguları yerine güvenmek mysql_real_escape_string() kullanmanızı öneririz.

Bu kullanmayı deneyin:

AND ('$tab' = '' OR ikon = '$tab')

Boş dizge verilirse o zaman durum her zaman başarılı olur.

Alternatif olarak, PHP sizin $id boş olup olmadığına bağlı olarak iki farklı sorguları oluşturmak olabilir.

Dinamik, örneğin, sizin sorgu oluşturabilirsiniz:

$query = "SELECT * FROM table WHERE foo='bar'";

if(isset($_GET['id'])) {
    $query .= " AND column='" . mysql_real_escape_string($_GET['id']) . "'";
}

Update: OP'ın sorusuna daha yakın olmak için kod güncellendi.

Arama dizesi if-else durumda sararak tarafından sağlanan eğer sorguyu çalıştırın:

$id = (int) $_GET['id'];

if ($id)
{
  // run query
}
else
{
  // echo oops
}

There is noway to check if a column is "anything"
The way to include all values into query result is exclude this field from the query.
But you can always build a query dynamically.
Just a small example:

$w=array();
if (!empty($_GET['rooms'])) $w[]="rooms='".mysql_real_escape_string($_GET['rooms'])."'";
if (!empty($_GET['space'])) $w[]="space='".mysql_real_escape_string($_GET['space'])."'";
if (!empty($_GET['max_price'])) $w[]="price < '".mysql_real_escape_string($_GET['max_price'])."'";


if (count($w)) $where="WHERE ".implode(' AND ',$w); else $where='';
$query="select * from table $where";

Sorgunuz için çok kolay:

$ikon="";
if ($id) $ikon = "AND ikon='$tab'";
mysql_query("SELECT * FROM filer 
             WHERE (real_name LIKE '%$searchString%' 
                   OR filinfo LIKE '%$searchString%')
                   AND public='1' 
                   $ikon 
             ORDER BY rank DESC, kommentarer DESC");

Ben tüm dizeleri zaten kaçmış umut