2011-10-25 50 views
0

我有下面的代码工作:ORDER BY子句不会变

$Ordering=$_POST["fname"]; 
$CustName=$_POST["CustName"]; 

echo "Ordering----HHH".$Ordering."HHH".'</br>'; 

$query="SELECT * FROM Chargebacks WHERE CustName= '$CustName' ORDER BY '$Ordering'"; 

两个fnameCustName来自另一个页面。 fname做工精细,CustName正确呼应为$Ordering(以下简称“HHH”是存在的,所以我可以肯定有没有偷偷摸摸的空间....)

ORDER BY子句简直什么也不做......如果输入无效的列标题,sript只是按预期崩溃,但如果使用有效的结果,结果的顺序就是它们在源表中显示的顺序。
如果我复制并粘贴回显的$Ordering的值并将其放入代码中(不带单引号),则子句将正常工作。

在研究中,我发现单引号和双引号以及普通,正方形和括号括号中的任意数量的变体,但它们都没有工作,我相信这样的事情不应该是必需的。
这是如此简单的事......不是吗?

+1

您使用的是哪种'mysql' API?有几个:mysql,mysqli和PDO_mysql。另外,ORDER BY子句中的谓词需要是表中列的名称。目前还不清楚这是否属于这种情况。 –

+2

在开始生产之前,请先阅读关于SQL注入的所有内容。 – Jordan

+1

将您的'order by'值加上引号会将它变成STRING,而不是字段名称。 –

回答

3

您是否试过在您的声明中删除$Ordering附近的引号?你自己说过,如果你删除了引号并将其替换为变量的内容。

0

1)$订购必须从表扣款 2)删除从$两侧的单引号订购

0

我敢肯定,你只需要正确串联这些变量的表格属性。

$query="SELECT * FROM Chargebacks WHERE CustName='".$CustName."' ORDER BY `".$Ordering."`"; 

此外,不要使用单引号,因为这使得SQL将它视为一个字符串。使用撇号(`)或者什么也没有:)

Shai。