2014-09-03 56 views
-3

我在我的網頁上創建了一個搜索工具欄,以允許用戶識別要搜索的列以及用於搜索該列的操作符。爲了避免大量的if語句,我想寫出這樣的SQL的:如何在SQL查詢中使用存儲等號的變量

if ($operator == "LIKE") { 
    sql = "SELECT * FROM `mytable` WHERE `$column` '$operator' '%$search%'"; 
} else { 
    sql = "SELECT * FROM `mytable` WHERE `$column` '$operator' '$search'"; 
} 

這工作正常,如果操作就好了,但是當它是=,這是行不通的。我檢查了發佈到頁面的數組,並確認數組發佈正確。如果操作員是「=」,我該怎麼做這項工作?這裏是數組:

Array 
(
    [column] => first_name 
    [operator] => = 
    [search] => paul 
    [page_rows] => 10 
) 
+1

SQL不會在運算符周圍使用引號;但如果它是來自用戶輸入的數據,將其列入白名單 – 2014-09-03 15:46:09

+1

即使您沒有調試工具,簡單的調試也能解決您的問題,在運行之前打印查詢文本,查看它,您可能會用變量周圍的'''看看問題 – simsim 2014-09-03 15:53:27

+0

@simsim你有推薦的特定調試工具嗎? – user3865463 2014-09-03 20:18:50

回答

0

它會跑的運營商刪除'

if ($operator == "LIKE") { 
    sql = "SELECT * FROM `mytable` WHERE `$column` $operator '%$search%'"; 
} else { 
    sql = "SELECT * FROM `mytable` WHERE `$column` $operator '$search'"; 
} 

,但也許這是最好只使用:

if ($operator == "LIKE") { 
    sql = "SELECT * FROM `mytable` WHERE `$column` LIKE '%$search%'"; 
} else { 
    sql = "SELECT * FROM `mytable` WHERE `$column` = '$search'"; 
} 
+0

謝謝。後續問題,我爲操作符使用了一個變量,所以我可以減少if語句的數量。所以'其他'也適用於!=,>,<等。你是否建議反對?如果是這樣,爲什麼? – user3865463 2014-09-03 20:23:36

+0

你應該確保''操作符'中不能有意想不到的值(爲了避免sql注入)。如果是這樣,那麼我會說可以使用運算符變量... – lpg 2014-09-03 20:50:27

0

不要$operater用單引號' 。直接使用LIKE=會更好。

相關問題