«
»
WEBWEB - PHPWordPressWordPress - SQL

Массовое обновление вставки в MySQL с использованием PHP

Массовое обновление вставки в MySQL с использованием PHP

Иногда нам нужно вставить большой набор данных в таблицу базы данных. Существует несколько способов массовой вставки данных в таблицу MySQL.

Использование одного оператора INSERT на строку довольно неэффективен. Вместо этого мы можем собрать один оператор INSERT с несколькими строками.

Сегодня я собираюсь показать, как выполнить массовую вставку в таблицу MySQL с помощью PHP.

MySQL запрос для вставки нескольких строк

Операторы INSERT, использующие синтаксис VALUES, могут вставлять несколько строк. Для этого включите несколько списков значений столбцов, каждый из которых заключен в скобки и разделен запятыми.

Следующий запрос вставляет несколько строк.

INSERT INTO tbl_name (a,b,c) VALUES (1,2,3), (4,5,6), (7,8,9);

Источник

Массовая вставка с использованием PHP

Вы можете использовать PHP, чтобы подготовить оператор MySQL для вставки нескольких строк, а также выполнить этот запрос.

Конкатенация PHP может быть использована для построения запроса. Вот простой фрагмент.

<?php $total_rows = 1000000; $batch_id = 1; $query = "INSERT INTO tbl_coupons (batch_id, code) VALUES "; $values = ''; for($i = 1; $i <= $total_rows; $i++){ // Create string with random characters $coupon_code = echo chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)); $values .= "('$batch_id', '$coupon_code'),"; } $values = substr($values, 0, strlen($values) - 1); $this->db->query($query); ?>

Вышеуказанный фрагмент вставляет несколько строк. Кроме того, вы также можете использовать функцию implode(), чтобы избежать конкатенации строк.

Однако в этом фрагменте есть серьезный недостаток. Настоящая проблема возникает, когда в таблице много столбцов, а длина запроса превышает значение max_allowed_packet в mysql . Вы можете столкнуться с предупреждением следующим образом:

Warning: Error while sending QUERY packet. PID=33735

Чтобы проверить ‘max_allowed_packet’, вы можете просто выполнить следующую инструкцию.

SHOW VARIABLES LIKE 'max_allowed_packet';

Чтобы избежать этого, вы можете построить внутренний цикл для запуска запроса. Вот как это сделать:

<?php $total_rows = 1000000; $batch_id = 1; $insert_limit = 1000; $query = "INSERT INTO tbl_coupons (batch_id, code) VALUES "; $values = ''; for($i = 1; $i <= $total_rows; $i++){ // Create string with random characters $coupon_code = echo chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)); $values .= "('$batch_id', '$coupon_code'),"; if($i % $insert_limit == 0) { $values = substr($values, 0, strlen($values) - 1); $insert_query = $query . $values; $this->db->query($insert_query); $values = ''; } } $values = substr($values, 0, strlen($values) - 1); $this->db->query($query); ?>

До сих пор мы узнали, как выполнить массовую вставку, используя несколько операторов INSERT. Однако это не лучший способ вставить объемные данные.

Если вам не нужно манипулировать данными перед их вставкой, вы всегда можете использовать mysql ‘ LOAD DATA . Даже если вам нужно манипулировать данными перед вставкой, вы можете сгенерировать CSV-файл после манипуляции и вставить, используя LOAD DATA .

Массовое обновление

Для массового обновления вы можете использовать конструкцию ON DUPLICATE KEY UPDATE. Запрос будет выглядеть следующим образом:

INSERT INTO `table_name` (id, col) VALUES (1, 'val1'), (2, 'val2'), (3, 'val3') ON DUPLICATE KEY UPDATE col = VALUES(col);

Мы можем легко построить подобный тип запроса, используя PHP. Позволяет использовать массив , содержащий ключевое значение для создания запроса. Вот фрагмент.

<?php $coupons = array( 1 => 'ABCDE', 2 => 'GHIJK', 3 => 'EFGHI', 4 => 'RSTUV', 5 => 'VWXYZ', ); $data = array(); foreach ($coupons AS $key => $value) { $data[] = "($key, '$value')"; } $query = "INSERT INTO `tbl_coupons` (id, code) VALUES " . implode(', ', $data) . " ON DUPLICATE KEY UPDATE code = VALUES(code)"; $this->db->query($query); ?>

Кроме того, вы можете использовать конструкцию CASE в операторе UPDATE. Тогда запрос будет выглядеть примерно так:

UPDATE tbl_coupons SET code = (CASE id WHEN 1 THEN 'ABCDE' WHEN 2 THEN 'GHIJK' WHEN 3 THEN 'EFGHI' END) WHERE id IN(1, 2 ,3);

Таким образом, мы можем вставить и обновить несколько строк в таблицу MySQL, используя PHP.

Источник записи: https://thedebuggers.com

Связанные записи
PleskWEBПанели управления

Получение пробной лицензии Plesk Panel - как ее получить?

WordPressВсе для functions.phpВсе для разработки плагиновПлагиныШорткоды

Как добавить Автоматическое оглавление в WordPress

WordPressЗащита от вирусовПлагины

Как очистить взломанный сайт WordPress с помощью плагина Wordfence

WordPressWordPress - АдминкаВсе для wp-config.php

Что такое электронные ключи в WordPress? Как использовать и генерировать электронные ключи для wp-config.php