为什么这个sql查询没有返回已排序的数组

时间:2014-02-18 15:30:59

标签: php sql arrays sorting

我是PHP / 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"

2 个答案:

答案 0 :(得分:3)

ORDER BY 'P_Name'替换为ORDER BY P_Name,否则您只是不在ORDER BY中使用该列。

您还使用相同的$pid转义'变量。删除它们,这将工作。

之后,出于安全原因,您必须使用预准备语句重写它:)

P.S。正如评论中指出的那样,如果你想要删除恰好是列名的保留字,你可以使用反引号

答案 1 :(得分: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也可以正常工作。