Запрос на получение данных с одной таблицы в обратном порядке с парметрами

Рейтинг: 1Ответов: 1Опубликовано: 14.02.2023

Мне нужно чтобы выводились комментарии под каждую статью в обраном порядке, как правильно написать в 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

Собирать 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