0

我是新的 PHP 5 mysqli 的新手,但我已经用老式的方式做了很多工作。

所以这是我的代码

$query = "SELECT `id`, `catn`, `name`, `name_en`, `image`, `price`, `old_price`, `cat` FROM `products` WHERE `show` = 'Yes'";
        if (!empty($order)) {
            $params[0] = $params[0] . "s";
            $query = $query . " ORDER BY ? ".$way;
            $params[] = $order;
        }
        $stmt = $this->db->prepare($query);

        if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+
        {
            $refs = array();
            foreach($params as $key => $value)
                $refs[$key] = &$params[$key]; 
        } 

        if ($stmt) {
            call_user_func_array(array($stmt, 'bind_param'), $refs);

            $stmt->execute();
... more code below

var$way总是ASCor 。DESC但是查询给了我按 id 排序的结果(就像没有ORDER BY语句一样)。所以查询是在之前写的bind_param所以我猜参数没有正确绑定?你能告诉我错误可能在哪里吗

4

2 回答 2

0

如果你ORDER BY用一个参数组成你的子句,你将搜索固定的文字字符串,例如你会得到这个:

ORDER BY 'price' DESC

...而不是这样:

ORDER BY price DESC

您不能使用参数来提供标识符

于 2013-11-06T15:56:56.540 回答
0

我认为您没有bind_param正确使用,因为您排除了$types必须首先出现的论点。但是,这些用于参数(例如 的值show = ?)。您不会对查询结构的某些部分(例如关键字)使用参数。您必须将字符串连接到查询本身。如果您担心安全性,请明确进行连接,例如

if ($way == 'ASC') {
    $query .= "ASC";
}
else {
    $query .= "DESC";
}

bind_param将在参数周围添加引号,使查询无效(ORDER BY 'ASC'

于 2013-11-06T15:51:14.303 回答