I have a query:
SELECT * FROM products WHERE 1=1 ORDER BY :order_by :order_dir LIMIT :limit OFFSET :offset
My params array:
Array
(
[order_by] => price
[order_dir] => ASC
[limit] => 50
[offset] => 0
)
And I have a function for 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());
}
}
I'm trying to get products:
$result->products = $db->query($sql, $arr, 50, 0)->fetchAll();
My raw query I think looks like:
SELECT * FROM products WHERE 1=1 ORDER BY "price" "ASC" LIMIT 50 OFFSET 0
The query above is wrong. It should be:
SELECT * FROM products WHERE 1=1 ORDER BY price ASC LIMIT 50 OFFSET 0
How can I solve this problem?