Я сделал свое исследование и решил использовать подготовленные заявления в своих запросах, все, о чем я прошу, есть ли что-нибудь, что я должен знать, хороший или плохой переход на обычные запросы mysqli к подготовленным операциям.
Кроме того, я не понимаю логики, как не нужно избегать неприятных символов?
Сохранение плохих символов по-прежнему необходимо, но библиотека делает это автоматически для всех параметров, которые вы связываете. Это немного более удобно и не позволяет программисту забыть о необходимости дезинфекции.
Однако учтите, что этот автоматизм ограничен параметрами!
Следующий запрос является безопасным, поскольку bind_param()
заботится об экранировании:
$code = $_GET["code"]; $name= $_GET["name"]; $percentage= $_GET["percentage"]; $stmt = $mysqli->prepare("INSERT INTO items VALUES (?, ?, ?)"); $stmt->bind_param('iss', code, $name, $percentage); $stmt->execute();
следующий запрос небезопасен , потому что все , что вы помещаете непосредственно в запрос, не будет автоматически экранировано :
$tablename = $_GET["prefix"]."_items"; $code = $_GET["code"]; $name= $_GET["name"]; $percentage= $_GET["percentage"]; ---- UNSAFE! ---- $stmt = $mysqli->prepare("INSERT INTO `$tablename` VALUES (?, ?, ?)"); $stmt->bind_param('iss', $code, $name, $percentage); $stmt->execute();
при этом не следует использовать динамические имена таблиц, как показано в этом примере. Но точка стоит: будьте осторожны, даже с параметризованными запросами!
Единственным недостатком, о котором я могу думать, является то, что вы больше не можете видеть окончательный запрос для отладки (потому что он собирается только на стороне сервера).
?
Unnamed, или :name
named), значения, которые вы вставляете, автоматически цитируются. Есть как минимум два преимущества:
Большинство людей путают подготовленные заявления с заполнителями.
Общая идея использования заполнителей действительно велика, а готовые заявления – всего лишь подмножество заполнителей с ограниченной функциональностью.
Заполнители великолепны, потому что:
Что касается проблем с производительностью, о которых все говорят, большинство подготовленных инструкций медленнее обычного запроса. Однако в обоих случаях разница будет незаметной.