2014-02-18 44 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

对不起,这是我原来的,并最终把报价试试一些新的东西,在发布之前忘了带他们回来。 –

相关问题