Вставьте несколько фрагментов данных в MySQL, используя MySQLi и PDO.
Функцию mysqli_multi_query() можно использовать для выполнения нескольких операторов SQL.
В следующем примере в таблицу «MyGuests» добавляются три новые записи:
Пример (MySQLi — объектно-ориентированный)
<?php $servername = " localhost " ; $username = " username " ; $ password = " password " ; $ dbname = " myDB " ; $conn = новый mysqli ( $servername , $username , $password , $dbname ) // Проверьте ссылку ; если ( $conn -> ошибка подключения ) { die ( " Ошибка соединения: " . $conn -> connect_error ) } ; $sql = " INSERT INTO MyGuests (имя, фамилия, адрес электронной почты)VALUES ('John', 'Doe', '[email protected]'); " ; $sql .= " INSERT INTO MyGuests (имя, фамилия, адрес электронной почты) ЗНАЧЕНИЯ ('Мэри', 'Мо', '[email protected]'); $sql . = " INSERT ; INTO MyGuests (имя, фамилия, адрес электронной почты)VALUES («Джули», «Дули», «[email protected]») » ; if ( $conn -> multi_query ( $sql ) === ИСТИНА ) { эхо « Новая запись успешно добавлена » } ; еще { эхо « Ошибка : » $ sql « <br> » $ conn - > ошибка } $conn -> закрыть ( ) ? >; | Обратите внимание, что каждый оператор SQL должен быть разделен точкой с запятой. |
---|
Пример (MySQLi — процедурно-ориентированный)
<?php $servername = " localhost " ; $username = " username " ; $ password = " password " ; $ dbname = " myDB " ; $conn = mysqli_connect ( $servername , $username , $password , $dbname ) // Проверка ссылки ; если ( ! $conn ) { die ( " Ошибка соединения: " .mysqli_connect_error ( ) ) } ; $sql = " INSERT INTO MyGuests (имя, фамилия, адрес электронной почты)VALUES ('John', 'Doe', '[email protected]'); " ; $sql .= " INSERT INTO MyGuests (имя, фамилия, адрес электронной почты) ЗНАЧЕНИЯ ('Мэри', 'Мо', '[email protected]'); $sql . = " INSERT ; INTO MyGuests (имя, фамилия, адрес электронной почты)VALUES («Джули», «Дули», «[email protected]») » ; if ( mysqli_multi_query ( $conn , $sql ) ) { эхо « Новая запись успешно добавлена » } ; еще { эхо « Ошибка : » $ sql « <br> » . mysqli_close ( $conn ) ? >; Пример (PDO)
<?php $servername = " localhost " ; $username = " имя пользователя " ; $password = " пароль " ; $dbname = " myDBPDO " ; { $conn = новый PDO ( " mysql:host= $ servername ;dbname= $dbname " , $username , $password ) // устанавливаем режим ошибки PDO на исключение $conn -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION ) // Начать транзакцию ; $conn -> BeginTransaction ( ) // оператор SQL ; $conn -> exec ( " INSERT INTO MyGuests (имя, фамилия, адрес электронной почты) VALUES ('Джон', 'Доу', '[email protected]') " ) ; $conn -> exec ( " INSERT INTO MyGuests (имя) , фамилия, адрес электронной почты) ЗНАЧЕНИЯ («Мэри», «Мо», «[email protected]») » ) ; $conn -> exec ( " INSERT INTO MyGuests (имя, фамилия, адрес электронной почты) ЗНАЧЕНИЯ ('Джули', 'Дули', '[email protected]') " ) ; // Отправляем транзакцию; $conn -> коммит ( ) эхо ; « Новая запись успешно добавлена » } ; поймать ( PDOException $ е ) { // Если выполнение не удалось, откат $conn - > откат ( ) echo $ sql . " <br> " $e -> getMessage ( ) } ; $конн = ноль ? > Используйте подготовленные операторы
Расширение mysqli предоставляет второй способ вставки операторов.
Мы можем подготовить операторы и привязать параметры.
Расширение mysql может отправлять операторы или запросы в базу данных mysql без данных. Вы можете нематически ассоциировать или «связывать» переменные.
Пример (MySQLi использует подготовленные операторы)
<?php $servername = " localhost " ; $username = " username " ; $ password = " password " ; $ dbname = " myDB " ; $conn = новый mysqli ( $servername , $username , $password , $dbname ) // Обнаружение соединения ; если ( $conn -> ошибка подключения ) { die ( " Ошибка соединения: " . $conn -> connect_error ) } ; еще { $sql = " INSERT INTO MyGuests(имя, фамилия, адрес электронной почты) VALUES(?, ?, ?) " // Инициализируем объект оператора для mysqli_stmt_prepare(); $stmt = mysqli_stmt_init ( $conn ) // Оператор предварительной обработки ; если ( mysqli_stmt_prepare ( $stmt , $sql ) ) { // Привязываем параметры mysqli_stmt_bind_param ( $stmt , ' sss ' , $firstname , $lastname , $email ) // Устанавливаем параметры и выполняем ; $firstname = ' Джон ' ; $lastname = ' Доу ' ; $ email = ' [email protected] ' ; mysqli_stmt_execute ( $stmt ) ; $firstname = ' Мэри ' ; $lastname = ' $email = ' Мэри ' ; @ example.com ' ; mysqli_stmt_execute ( $stmt ) $firstname = ' Джули ' ; $lastname = ' Дули ' $ email = ' [email protected] ' ; mysqli_stmt_execute ( $ stmt ) } } ?> Мы видим, что в приведенных выше примерах модульность используется для решения проблем. Мы можем добиться более легкого чтения и управления, создавая блоки кода.
Обратите внимание на привязку параметров. Давайте посмотрим на код в mysqli_stmt_bind_param():
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
Эта функция связывает запрос параметров и передает параметры в базу данных. Второй параметр — «ссс». В следующем списке показаны типы параметров. Символ s сообщает MySQL, что параметр является строкой.
Это могут быть следующие четыре параметра:
я - целое число
d - число двойной точности с плавающей запятой
s - строка
б - логическое значение
Каждый параметр должен указывать тип для обеспечения безопасности данных. Определение типа может снизить риск уязвимостей SQL-инъекций.