Как использовать подготовленные заявления в многопользовательском веб-сайте?

Где (в коде) разместить элементы подготовленных выписок на веб-сайте, где многие пользователи взаимодействуют с базой данных?

Я преобразовываю свой код из использования $mysqli->escape_string в использование подготовленных операторов, поскольку люди говорят, что это лучший способ защиты от внедрения SQL.

Это просто удаление всех $mysqli->escape_string s, а также замена других частей моего кода следующим образом:

$mysqli->query("update `users` set `email`='$newEmail' where `userid`={$_SESSION['userid']} limit 1");

заменить на это:

$stmt = $mysqli->prepare("update `users` set `email`=? where `userid`=? limit 1");
$stmt->bind_param('si',$newEmail,$_SESSION['userid']);
$stmt->execute();
$stmt->close();

?

Люди говорят, что подготовленные заявления более эффективны, так как шаблон заявления готовится только один раз, и затем его можно использовать повторно с другими параметрами. Но в приведенной выше замене кода подготовка шаблона не будет выполняться каждый раз, когда любой пользователь хочет обновить свой адрес электронной почты? Должен ли я вместо этого подготовить все заявления при запуске сервера? И не готовить их снова? (Хотя я не знаю, как это сделать.) Где должны быть prepare , bind_param и close в коде моего сайта?

Всего 1 ответ


Это просто удаление всех $ mysqli-> escape_strings, а также замена переменных с заполнителями

Да.

Люди говорят, что подготовленные заявления более эффективны, так как шаблон заявления готовится только один раз, и затем его можно использовать повторно с другими параметрами.

Забудь об этом. Невозможно повторно использовать подготовленный оператор между запросами.

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

Это скорее маркетинговый трюк, чем действительно полезная функция.


Есть идеи?

10000