У меня есть запрос:PDO котировка в моей просьбе
SELECT * FROM products WHERE 1=1 ORDER BY :order_by :order_dir LIMIT :limit OFFSET :offset
Мой PARAMS массив:
Array
(
[order_by] => price
[order_dir] => ASC
[limit] => 50
[offset] => 0
)
И у меня есть функция для bindValues:
public function query($sql, $params=array(), $limit = null, $offset = null){
try {
if (!is_null($offset) && !is_null($limit)) {
$sql .= ' LIMIT :limit OFFSET :offset';
$params['limit'] = (int)$limit;
$params['offset'] = (int)$offset;
}
$stmt = $this->database->prepare($sql);
foreach($params as $key => $value) {
if(is_int($value)) {
$param = PDO::PARAM_INT;
} elseif(is_bool($value)) {
$param = PDO::PARAM_BOOL;
} elseif(is_null($value)) {
$param = PDO::PARAM_NULL;
} elseif(is_string($value)) {
$param = PDO::PARAM_STR;
} else {
$param = FALSE;
}
if($param) $stmt->bindValue(":$key", $value, $param);
}
$stmt->execute();
return $stmt;
} catch(PDOException $e){
throw new Exception($e->getMessage());
}
}
Я пытаюсь для получения продуктов:
$result->products = $db->query($sql, $arr, 50, 0)->fetchAll();
Мой сырым запрос я думаю выглядит следующим образом:
SELECT * FROM products WHERE 1=1 ORDER BY "price" "ASC" LIMIT 50 OFFSET 0
Приведенный выше запрос является неправильным. Это должно быть:
SELECT * FROM products WHERE 1=1 ORDER BY price ASC LIMIT 50 OFFSET 0
Как я могу решить эту проблему?
'упорядочить по случай, когда: order_dir = 'ASC', то: order_by конец ASC, случай, когда: order_dir = 'DESC', то: order_by конец DESC ...' – lad2025
Пожалуйста, разъясните свой комментарий – user889349