В гайде использовался этот кусок кода:
$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);
Объясните в чем разница и что лучше использовать?
Представь что username у меня Д'Артаньян.
Попробуй подставить во второй запрос и выполнить.
Ничего не получится. А точнее будет:
... VALUES('Д'Артаньян', ...
база данных решит, что имя - это Д, а дальше какая-то белиберда.
Потому что когда ты подставляешь переменную напрямую в запрос, то есть риск того что содержимое переменной будет интерпретировано как часть запроса. И в лучшем случае будет ошибка, а в худшем - взлом сайта.
Поэтому надо всегда применять первый вариант, когда переменные подставляются в запрос не напрямую, а через маркеры - вот как у тебя знаки вопроса. Тем более PDO поддерживает не только знаки вопроса, но и именованные маркеры, типа :name
- некоторым такое читать проще.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть страничка постов с табами для каждой категории, выглядит это так:
Я понимаю, что эту ошибку уже тысячу раз рассматривалиНа просторах интернета я нашёл три решения этой ошибки в моём случае
Написал код загрузки изображения на сервер - надежен ли он или можно как то загрузить вредоносный кодМожет есть советы какие нибудь? PHP
Возникла необходимость рефакторинга довольно старого кода на php, написанного примерно в 2005м годуКод запускается на php 5