PHP MySQL Вставка нескольких строк


Вставка нескольких записей в MySQL с помощью MySQLi и PDO

Функция mysqli_multi_query() может использоваться для выполнения нескольких SQL-запросов.

Una tulliuttuq atuutigaq pingasut nutaat titiqqat "MyGuests"-mut naqigarmut ilaliuppoq:

Пример (MySQLi - объектно-ориентированный)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Создать подключение $conn = new mysqli($servername, $username, $password, $dbname); //Проверить подключение if ($conn->connect_error) { die("Ilauttit:" . $conn->connect_error); } $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', '[email protected]');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', '[email protected]');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', '[email protected]')"; if ($conn->multi_query($sql) === TRUE) { echo "Nutaat titiqqat ilaliutaujuit iluatsillutik"; } else { echo "Kukkunneq: " . $sql . "<br>" . $conn->error; } $conn->close(); ?>


Note Maliguk: SQL nassuiaatit tamarmik semiikulamik avittausimariaqaqput.

Пример (MySQLi - процедурный)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Создать подключение $conn = mysqli_connect($servername, $username, $password, $dbname); //Проверка подключения if (!$conn) { die("Ilauttit naammangittuq:" . mysqli_connect_error()); } $ = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', '[email protected]');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', '[email protected]');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', '[email protected]')"; if (mysqli_multi_query($conn, $sql)) { echo "Nutaat titiqqat ilaliutaujuit iluatsillutik"; } else { echo "Ошибка: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); ?>


Пример (PDO)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDBPDO"; try { $conn = new 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 (firstname, lastname, email) VALUES ('John', 'Doe', '[email protected]')"); $conn->exec("INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', '[email protected]')"); $conn->exec("INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', '[email protected]')"); //Зафиксировать транзакцию $conn->commit(); echo "Новые записи успешно вставлены"; } catch(PDOException $e) { //Откат при сбое выполнения $conn->rollback(); echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>



Использование подготовленных выражений

Расширение mysqli предоставляет второй способ вставки операторов.

Мы можем подготавливать операторы и привязывать параметры.

Расширение mysql может отправлять операторы или запросы в базу данных MySQL без данных. Вы можете связать или "привязать" переменные к столбцам.

Пример (MySQLi с использованием подготовленных операторов)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Создать подключение $conn = new mysqli($servername, $username, $password, $dbname); //Проверить подключение if ($conn->connect_error) { die("Ошибка соединения:" . $conn->connect_error); } else { $sql = "INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?)"; //Инициализировать объект оператора для mysqli_stmt_prepare() $stmt = mysqli_stmt_init($conn); //Подготовленный оператор if (mysqli_stmt_prepare($stmt, $sql)) { //Привязать параметры mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email); //Установить параметры и выполнить $firstname = 'John'; $lastname = 'Doe'; $email = '[email protected]'; mysqli_stmt_execute($stmt); $firstname = 'Мэри'; $lastname = 'Мо'; $email = '[email protected]'; 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);

Эта функция привязывает параметры запросов и передает параметры в базу данных. Второй параметр — "sss". В следующем списке показаны типы параметров. Символ 's' сообщает MySQL, что параметр является строкой.

Может быть одним из следующих четырех типов параметров:

  • i - целое число
  • d - число с плавающей запятой двойной точности
  • s - строка
  • b — объект хранения двоичных blob-данных

Каждый параметр должен иметь указанный тип для обеспечения безопасности данных. Проверяя тип, можно снизить риск уязвимостей SQL-инъекций.

Другие расширения