Как лучше вставлять переменную в запрос?

Статус
В этой теме нельзя размещать новые ответы.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Просматриваю код в одном скрипте, там в запросах везде переменные вставляются путем конкантенации:

Код:
 ... FROM settings WHERE id_user=".$user_id." AND confirm = '0' ...

У меня вопрос, как все же лучше вставлять переменную в запрос, методом выше или

Код:
 ... FROM settings WHERE id_user={$user_id} AND confirm = '0' ...

Будет ли разница в скорости выполнения скрипта и будет ли эта разница существенной?
По идее на конкантенацию строк тратятся ресурсы и время.
PS переменная в запросе обработана выше функцией intval()
 
И так и так - плохо, если у тебя кто-то в переменную $user_id пропихнет слеш - получишь sqlInjection.

Используй PDO или prepared statements в mysqli (mysqlnd). PDO универсальней

Для просмотра ссылки Войди или Зарегистрируйся

PHP:
$stmt = $dbh->prepare('SELECT * FROM settings WHERE id_user=:user_id AND confirm = :confirm');
$stmt->bindValue(':user_id', $user_id);
$stmt->bindValue(':confirm', 0);
$stmt->execute();

ну или покороче:

PHP:
$stmt = $dbh->prepare('SELECT * FROM settings WHERE id_user=:user_id AND confirm = :confirm');
$stmt->execute([
':user_id' => $user_id,
':confirm' => 0,
]);
 
если тип ячейки в БД интежер то кавичек ненадо, просто так
AND confirm = 0
Я знаю, но там тип не integer, а ENUM('0','1') - читал что если в поле всего несколько вариантов допустимо - ENUM эффективнее будет.
 
Очень плохой вариант. Во-первых, внутри енум тот же инт. Во-вторых, можно напутать и Для просмотра ссылки Войди или Зарегистрируйся
 
  • Нравится
Реакции: BaBL
для примера ... Для просмотра ссылки Войди или Зарегистрируйся
Прошу прощения, но там я не нашел того, о чем вы говорите. Я просил показать вектор атаки именно на звездочку. В статье же описываются атаки на недостаточную фильтрацию данных.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху