Если вы хотите опытный совет, вы должны передумать. Полностью.
То, что является вашей главной заботой, на самом деле является самой незначительной вещью в мире. Вы можете использовать тот или иной способ без малейшей разницы. Не существует «самого надежного» пути. Это всего лишь несколько способов сделать то же самое.
С другой стороны, «нет необходимости в параметризации» - это серьезное заблуждение.
Параметризованные запросы могут принести пользу только в том случае, если они используются явным образом по всему сайту, без исключений. Одно исключение может испортить всю защиту.
Не говоря уже о том, что параметризованный запрос может значительно облегчить вашу жизнь.
Подготовленные заявления - не такой уродливый код, который распространяют на этом сайте некоторые энтузиасты. На самом деле это быстрый и аккуратный способ написания безопасного кода.
Скажем, код, который занял десяток строк, можно сделать всего за один :
$data = $db->getAll("SELECT * FROM table WHERE id = :placeholder:",$id);
и будь в полной безопасности
без уродливого ручного переплета.
без подверженного ошибкам ручного литья.
Еще один пример, демонстрирующий силу заполнителей
$sql = "SELECT * FROM table WHERE tstamp BETWEEN ?i AND ?i AND flag=?s AND IN in (?a)";
$data = $db->getAll($sql,$min,$max,$flag,$array_of_ids);
Две строки.
Я не слишком хорош в PDO, но это будет похоже на дюжину строк кода даже без подключения
$in = implode(',', array_fill(0, count($array_of_ids), '?'));
$sql = "SELECT * FROM table WHERE tstamp BETWEEN ? AND ? AND flag=? AND id IN ($in)"
$sth = $dbh->prepare($sql);
$stmt->bindValue(1, $min);
$stmt->bindValue(2, $max);
$stmt->bindValue(3, $flag);
foreach ($array_of_ids as $i => $id) {
$stmt->bindValue(($i+4), $id);
}
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
И сопоставимое количество с вашим текущим ручным литьем.
Это на самом деле сила программирования.
Можно написать программу , которая сделает всю грязную работу за них.
Подход почти никогда не видел на этом сайте.
Сапиенти сат