PHP MySQL подготовленных операторов
Подготовленные заявления, чтобы предотвратить MySQL инъекции очень полезен.
Подготовленные заявления и связанные параметры
Подготовленные заявления для выполнения множества того же оператора SQL, а также более эффективно выполнять.
Работы подготовленных заявлений следующим образом:
Предварительная обработка: Создать шаблон SQL заявление отправляется в базу данных. Значение параметра зарезервировано "?" Марк. Например:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
Анализ базы данных, компиляции, выполнения SQL оптимизации запросов утверждения шаблона, и сохраняет результат не выводится.
Исполнение: Наконец, значения параметров передаются приложению связывания ( "?") Знак, база данных выполняет инструкции. Приложения могут быть выполнены во много раз, если значение параметра не то же самое.
По сравнению с прямым выполнением операторов SQL, подготовленный оператор имеет два основных преимущества:
Подготовленные заявления значительно сокращает время проведения анализа, только запрос (хотя инструкции выполняются).
Связанные параметры, чтобы уменьшить пропускную способность сервера, вам нужно всего лишь отправить запрос параметра вместо всего заявления.
Подготовленные заявления, направленные против инъекции SQL является очень полезным, потому что после того, как использовать различные протоколы для передачи значений параметров, чтобы обеспечить законность данных.
MySQLi подготовлены заявления
В следующем примере используется MySQLi в подготовленном заявлении, и связать соответствующие параметры:
Примеры (MySQLi с использованием подготовленных операторов)
$ Servername = "локальный";
$ Имя пользователя = "Имя пользователя";
$ Password = "пароль";
$ DBNAME = "MyDB";
// Создать соединение
$ Conn = новый MySQLi ($ ServerName, $ имя пользователя, пароль $, $ имя_бд);
// Проверка соединения
если ($ conn-> connect_error) {
умереть ( "Не удалось установить соединение:" $ conn-> connect_error.);
}
// Предварительная обработка и связывание
$ Stmt = $ conn-> подготовка ( "INSERT INTO MyGuests (Firstname, Lastname, электронная почта) ЗНАЧЕНИЯ (,,) ???");
$ Stmt-> bind_param ( "SSS", $ Firstname, $ Lastname, $ электронная почта);
// Установить параметры и выполнить
$ Firstname = "Джон";
$ Lastname = "Doe";
$ Email = "[email protected]";
$ Stmt-> Execute ();
$ Firstname = "Мария";
$ Lastname = "Моу";
$ Email = "[email protected]";
$ Stmt-> Execute ();
$ Firstname = "Джули";
$ Lastname = "Дули";
$ Email = "[email protected]";
$ Stmt-> Execute ();
Эхо "Новая запись вставляется успешно";
$ Stmt-> близко ();
$ Conn-> близко ();
?>
Разбор каждой строки кода в следующих примерах:
В SQL отчетности, мы используем знак вопроса (?), Здесь мы можем заменить знак вопроса целое число, строка, двойной точности с плавающей точкой и логические значения.
Далее, давайте посмотрим на bind_param () функции:
Параметры функции связывания SQL, и скажите значение параметра базы данных. типы данных параметров обработки столбца "для" Sss остальных параметров. s характер сообщает базе данных, что строка параметра.
Есть четыре типа параметров:
- я - целое число (целое число)
- d - двойной (двойной точности с плавающей точкой)
- s - строка (строка)
- б - BLOB (большой двоичный объект: двоичные большие объекты)
Каждый параметр необходим для указания типа.
Параметр типа данных указывает базу данных, вы можете снизить риск SQL инъекций.
Примечание: Если вы хотите , чтобы вставить дополнительные данные (вводимые пользователем), проверка данных очень важна. |
PDO подготовлены заявления в
Следующие примеры, которые мы используем подготовленные заявления в ПДО и обязательных параметров:
Примеры (PDO с использованием подготовленных операторов)
$ Servername = "локальный";
$ Имя пользователя = "Имя пользователя";
$ Password = "пароль";
$ DBNAME = "myDBPDO";
попробуйте {
$ Conn = новый PDO ( "MySQL: хост = $ имя_сервера; имя_бд = $ имя_бд", $ имя пользователя, пароль $);
// Установить режим исключения ошибки PDO
$ Conn-> SetAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
// Параметры связывания предварительной обработки и SQL
$ Stmt = $ conn-> подготовить ( "INSERT INTO MyGuests (Firstname, Lastname, электронная почта)
ЗНАЧЕНИЯ (: Firstname ,: Lastname ,: электронная почта) ");
$ Stmt-> bindParam ( ': Firstname', $ Firstname);
$ Stmt-> bindParam ( ': Lastname', $ Lastname);
$ Stmt-> bindParam ( ': электронная почта', $ электронная почта);
// Вставить строку
$ Firstname = "Джон";
$ Lastname = "Doe";
$ Email = "[email protected]";
$ Stmt-> Execute ();
// Вставьте другую строку
$ Firstname = "Мария";
$ Lastname = "Моу";
$ Email = "[email protected]";
$ Stmt-> Execute ();
// Вставьте другую строку
$ Firstname = "Джули";
$ Lastname = "Дули";
$ Email = "[email protected]";
$ Stmt-> Execute ();
Эхо "Новая запись вставляется успешно";
}
поймать (PDOException $ е)
{
.. Эхо $ SQL "<br>" $ e-> GetMessage ();
}
$ Conn = NULL;
?>