Объясните в чем разница

157
20 апреля 2022, 12:10

В гайде использовался этот кусок кода:

$pdo = new PDO($dsn, $user, $password);
$sql = 'INSERT INTO users(Username, Email, Login, Pass) VALUES(?, ?, ?, ?)';
$quare = $pdo->prepare($sql);
$quare->execute([$username, $email, $login, $pass]);

До этого я делал так:

$link = mysqli_connect($host, $user, $password, $db);
$query = "INSERT INTO users_i(Username, Email, Login, Pass) VALUES('$username', '$email', '$login', '$pass')";
$result = mysqli_query($link, $query);
if($result)
{
  echo "Выполнение запроса прошло успешно";
}
mysqli_close($link);

Объясните в чем разница и что лучше использовать?

Answer 1

Представь что username у меня Д'Артаньян.
Попробуй подставить во второй запрос и выполнить.

Ничего не получится. А точнее будет:

... VALUES('Д'Артаньян', ...

база данных решит, что имя - это Д, а дальше какая-то белиберда.

Потому что когда ты подставляешь переменную напрямую в запрос, то есть риск того что содержимое переменной будет интерпретировано как часть запроса. И в лучшем случае будет ошибка, а в худшем - взлом сайта.

Поэтому надо всегда применять первый вариант, когда переменные подставляются в запрос не напрямую, а через маркеры - вот как у тебя знаки вопроса. Тем более PDO поддерживает не только знаки вопроса, но и именованные маркеры, типа :name - некоторым такое читать проще.

READ ALSO
Не работает ajax подгрузка постов WordPress

Не работает ajax подгрузка постов WordPress

Есть страничка постов с табами для каждой категории, выглядит это так:

98
Ошибка Trying to access array offset on value of type null

Ошибка Trying to access array offset on value of type null

Я понимаю, что эту ошибку уже тысячу раз рассматривалиНа просторах интернета я нашёл три решения этой ошибки в моём случае

111
Загрузка изображений на сервер. Безопасен ли код?

Загрузка изображений на сервер. Безопасен ли код?

Написал код загрузки изображения на сервер - надежен ли он или можно как то загрузить вредоносный кодМожет есть советы какие нибудь? PHP

198
Рефакторинг старого кода php

Рефакторинг старого кода php

Возникла необходимость рефакторинга довольно старого кода на php, написанного примерно в 2005м годуКод запускается на php 5

94