Вставка групп строк с помощью PHP и MYSQL

0

Я пытаюсь загрузить данные из нескольких сотен текстовых файлов в базу данных.

Я считаю, что MYSQL выходит из цикла, не вставляя все строки.

Может ли кто-нибудь предложить, как вставить блоки из 1000 строк в конец данных, с кодом PHP?

$filenames_array = array();

foreach($filenames_array as $filename)
{

        $file_array     = file($filename);
        $file_value     = $file_array[0];
        $new_array  = explode(",", $file_value);
        $length         = count($new_array);


        for($i = 0; $i < $length; $i++)
        {

        $sql = "INSERT INTO `names`
            (`id`, `name`)   

            VALUES 
            ('',
            '" . $new_array[$i] . "'
            )";

        $result = mysql_query($sql) or die(mysql_error());
        echo $i . 'Row Inserted<br />';
        }

    }
  • 0
    Где инициализируется $ filenames_array? Какой цикл заканчивается рано? Цикл? Почему вы уверены, что цикл for завершается рано? Когда он завершается, умирает (mysql_error ()); Скажите, есть ли выход? Если так, то почему? Что вы подразумеваете под "блоками по 1000 строк до конца данных"? Вы хотите добавить 1000 записей в существующую таблицу MySQL одновременно?
  • 0
    Я не нашел время, чтобы напечатать массив имен файлов. Это массив всех имен файлов. Я думаю, что проблема заключается в MySQL. Причина, по которой я это говорю, заключается в том, что экспорт SQL с помощью phpmyadmin разбивает вставки на блоки по 1500 строк. Я прошу сделать что-то подобное.
Теги:

3 ответа

0

Почему бы не объединить каждый txt файл в один большой текстовый файл и прочитать его по очереди? См. Примеры здесь http://php.net/manual/en/function.fgets.php

В основном:

<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>
  • 0
    У меня есть несколько сотен текстовых файлов. Копирование и вставка всей информации отрицательно сказывается на цели написания этого кода. MYSQL завершает работу примерно после 1100 вставок строк. Мне нужно вставить около 6000 строк.
  • 0
    Объединив все в текстовый файл, я не имел в виду копирование и вставку. Может быть, вы могли бы прочитать список всех файлов в массив, скопировать содержимое каждого из них, используя file_get_contents и file_put_contents, и сделать все это автоматически! :)
0

вы, вероятно, пытаетесь запустить слишком много инструкций INSERT в одном запросе.

загляните в PDO и подготовленные операторы или используйте синтаксис SQL следующим образом:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
  • 0
    если он имеет дело с несколькими сотнями текстовых файлов, я не думаю, что синтаксис множественной вставки был бы жизнеспособным решением?
  • 0
    он на самом деле не отправляет много вставок в одном запросе - всегда только по одному
Показать ещё 1 комментарий
0

Возможно ли, что одна из записей, которую вы пытаетесь вставить, содержит одну цитату? В этом случае произойдет ошибка, и цикл не завершится.

Вы всегда должны избегать значений, которые вы вставляете в базу данных с помощью mysql_real_escape_string, чтобы предотвратить подобные проблемы, и убедиться, что вы не уязвимы для sql injection.

    $sql = "INSERT INTO `names`
            (`id`, `name`)   

            VALUES 
            ('',
            '" . mysql_real_escape_string($new_array[$i]) . "'
            )";
  • 0
    Данные не содержат одинарных кавычек. Я думаю, что это проблема MYSQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню