2013-08-31 50 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建议