Intereting Posts
Какую кодировку использует ZipArchive для хранения имен файлов в созданном архиве? PHP день недели числовой текст дня недели Как получить консоль Linux $ COLUMNS и $ ROWS из PHP cli? Как получить новую ширину и высоту после поворота изображения с помощью функции imagerotate ()? Текстуры с динамически назначенным именем бросают мой код CodeIgniter: SQL-аудит всех вызовов $ this-> db-> query ()? Google App-Gmail Невозможно установить. Gmail, заменяющий адрес при отправке через SMTP-транспорт Swiftmailer (PHP) Laravel: как использовать множественные отношения опорных таблиц Regex получает строку после ключевого слова Дата PHP () показывает дату завтрашнего дня Как я могу создать объект DOM из HTML-файла на языке php? MongoDB GridFS хранит несколько размеров изображения или использует на лету изменение размера URL с только слэшами в чистом php, таком как codeigniter uri pattern Самый простой способ создать / получить php_memcache.dll для PHP 5.4 PHP: Как скрыть / отобразить куски HTML

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

Я хочу вставить данные из массива. Ниже приведен пример ситуации.

Я хватаю всех моих друзей в списке друзей (fb) и сохраняю их в массиве.

Теперь я хочу вставить свои данные ( name, fbid, birthday ) в таблицу.

В настоящее время я делаю это, используя цикл for ниже – пример кода.

 <?php $friendsname = $_POST['name']; $friendsfbid = $_POST['fbid']; $friendsbday = $_POST['birthday']; for($i<0;count($friendsfbid);$i++){ $sql_query = "INSERT INTO table (fbid, name, birthday) VALUES ('$friendsfbid[$i]','$friendsname[$i]','$friendsbday[$i]') ON DUPLICATE KEY UPDATE fbid='$friendsfbid[$i]', name='$friendsname[$i]', birthday='$friendsbday[$i]'"; } ?> 

Теперь, если у меня будет 300 друзей, это будет цикл 300 раз.

Чем больше друзей, тем больше времени потребуется для обработки данных.

Есть ли способ избежать этого или повысить производительность кода. ?

Использование PHP с mySQL

Пожалуйста, смотрите этот запрос, надеясь, что это улучшит наш код и скорость.

Избегайте выполнения SQL-запросов в цикле

Общей ошибкой является размещение SQL-запроса внутри цикла. Это приводит к нескольким обратным поездкам в базу данных и значительно более медленным сценариям. В приведенном ниже примере вы можете изменить цикл для создания единого SQL-запроса и вставить всех своих пользователей одновременно.

 foreach ($userList as $user) { $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")'; mysql_query($query); } 

Вместо использования цикла вы можете объединить данные в один запрос базы данных.

 $userData = array(); foreach ($userList as $user) { $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")'; } $query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData); mysql_query($query); 

Вставляйте несколько строк за раз. См. Этот пример :

 INSERT INTO example (example_id, name, value, other_value) VALUES (100, 'Name 1', 'Value 1', 'Other 1'), (101, 'Name 2', 'Value 2', 'Other 2'), (102, 'Name 3', 'Value 3', 'Other 3'), (103, 'Name 4', 'Value 4', 'Other 4'); 

Зацикливание через php для генерации данных нескольких строк и выдача одной вставки, которая добавляет, наконец, несколько строк

 $sql = ''; foreach($friendsfbid as $key => $value){ $sql .= INSERT INTO table (fbid, name, birthday) VALUES ('$value[$key]','$friendsname[$key]','$friendsbday[$key]') ON DUPLICATE KEY UPDATE fbid='$value[$key]', name='$friendsname[$key]', birthday='$friendsbday[$key]'"; } mysql_query($sql); 

Вы можете вставлять свои sql INSERT в строку, а затем запускать их, вызывая функцию запроса только один раз. Это должно ускорить процесс.