2014-02-18 75 views
0

我是PHP/sql新手,但我似乎無法弄清楚爲什麼這個函數沒有返回一個適當排序的數組。它返回正確的結果,但它們沒有排序。爲什麼這個SQL查詢不返回一個排序的數組

//TAKE PRODUCT ID RETURN ARRAY OF PRODUCT INFO 
function productinfo($pid) { 

     global $sql; 
     $query = "SELECT * FROM Products 
        WHERE Product_ID = '$pid' 
        ORDER BY 'P_Name'"; 
     $result = mysqli_query($sql, $query); 
     $array = array(); 

     if(mysqli_num_rows($result) < 1) { 
      echo mysqli_error($sql); 
     }//END IF 
     else{ 
      while($row = mysqli_fetch_array($result)) { 
       array_push($array, $row['Product_ID']); 
       array_push($array, $row['P_Name']); 
       array_push($array, $row['Charge_Desc']); 
       array_push($array, $row['Low_Price']); 
       array_push($array, $row['High_Price']); 
       array_push($array, $row['Link']); 
       array_push($array, $row['Description']); 
      }//END WHILE 

     }//END ELSE 

    return $array; 

}//END FUNCTION 

編輯:更改Mysql查詢到下面的代碼,仍然沒有得到一個排序的數組。

$query = "SELECT * FROM Products 
WHERE Product_ID = '$pid' 
ORDER BY P_Name ASC" 
+0

您在sql語句中的「Order By」需要知道如何排序:DESC或ASC。 –

+0

您的PHP代碼不會嘗試對您的SQL結果進行排序。而你的SQL查詢按一個常數值排序。 –

回答

3

替代ORDER BY 'P_Name'ORDER BY P_Name,否則你就是不使用該列中ORDER BY

您也可以用相同的' s轉義您的$pid變量。刪除它們,這將工作。

之後,你就會有出於安全原因:)

附註:準備好的發言改寫正如在評論中指出,如果你想逃避保留字,它正好是列名,你可以使用反引號

+0

如果你想使用保留關鍵字作爲表名,你也可以使用反引號。 – GuyT

+0

@GuyT肯定,但P_name不保留:) – Alexander

+0

我知道,但你可以將它添加到你的答案:) – GuyT

0

的問題是在這裏:

SELECT * FROM Products WHERE Product_ID = '$pid' ORDER BY 'P_Name' 
--             -----^ 

您使用的是字符串'P_Name'而不是列名P_Name。試試這個:

SELECT * FROM Products WHERE Product_ID = '$pid' ORDER BY `P_Name` 

在此情況下(事實上,大多數情況下)的反引號是可選的,所以ORDER BY P_Name會工作也沒關係。

+0

對不起,這是我原來的,並最終把報價試試一些新的東西,在發佈之前忘了帶他們回來。 –

相關問題