Запрос на получение данных с одной таблицы в обратном порядке с парметрами
Мне нужно чтобы выводились комментарии под каждую статью в обраном порядке, как правильно написать в SELECT, чтобы всё работало $sql = "SELECT * FROM $table ORDER BY id DESC"; так это не работает
Вот весь код функции
function selectAll($table, $params = []){
global $pdo;
$sql = "SELECT * FROM $table ORDER BY id DESC";
if(!empty($params)){
$i = 0;
foreach ($params as $key => $value){
if (!is_numeric($value)){
$value = "'".$value."'";
}
if ($i === 0){
$sql = $sql . " WHERE $key=$value";
}else{
$sql = $sql . " AND $key=$value";
}
$i++;
}
}
$query = $pdo->prepare($sql);
$query->execute();
dbCheckError($query);
return $query->fetchAll();
}
Ответы (1 шт):
Автор решения: fox
→ Ссылка
Собирать sql руками - очень-очень плохая идея. У вас тут полно sql-иньекций.
Возьмите параметизированные запросы. Псевдокод:
// SAFETY: переменной $table доверяем
$sql = "SELECT * FROM $table";
if(!empty($params)){
$sql = $sql . ' WHERE 1 = 1'
foreach ($params as $key => $value) {
// мы точно доверяем значению $key?
$sql = $sql . " AND $key = ?";
}
}
$sql = $sql . ' ORDER BY id DESC';
$query = $pdo->prepare($sql);
$query->execute([175, 'yellow']); // или bindParam