2013-08-31 80 views
0

我有一個查詢字符串的變量(不要擔心,我安全地做到了這一點)。請告訴我如何將變量添加到我的sql查詢中。我的變量:變量MySql查詢排序依據和排序

$order = "ASC"; 
if(isset($_POST['sort'])){ 
    if($_POST['sort']=="date"){ 
     $sort = "date"; 
    } 
    else if($_POST['sort']=="pricelow"){ 
     $sort = "Price"; 
    } 
    else if($_POST['sort']=="pricehigh"){ 
     $sort = "Price"; 
     $order = "DESC"; 
    } 
} 

而且我下面的查詢:

mysql_query("SELECT * FROM event ORDER BY '$sort' '$order'"); 
+5

刪除'$ sort'和'$ order'的單引號 – 2013-08-31 20:49:03

+2

我很高興你問。請[不要在新代碼中使用mysql_ *函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 他們不再被維護,並[正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。 改爲了解** Prepared Statements **,並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)。請參閱[本文](http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php),以便快速瞭解如何做到這一點以及爲什麼這麼重要。 –

+0

至於Akam所說的字段名稱不會被引用,也不會執行ASC DESC關鍵字。只有時間字段名稱需要引號,並且只有當它們的名稱匹配mysql關鍵字時 –

回答

-2
mysql_query("SELECT * FROM event ORDER BY " . $sort . " " . $order); 

或者改變您的分配是這樣的:

$order = " DESC"; 

,你可以使用:

mysql_query("SELECT * FROM event ORDER BY " . $sort . $order); 
+0

您需要在'SORT'和'ORDER'之間有一個空格。或者在你的變量中或者在你的查詢中進行。 – DevlshOne

+0

Downvote的原因是什麼? – DevlshOne

0

我認爲你有它涵蓋了,只是一個簡單的變化,來自各地的排序和順序變量

mysql_query("SELECT * FROM event ORDER BY $sort $order") 

就在旁註中刪除單引號中的SQL:MySQL是過時了,我會使用庫MySQLi或PDO建議