2011-10-25 52 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。