Я пытаюсь загрузить данные из нескольких сотен текстовых файлов в базу данных.
Я считаю, что 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 />';
}
}
Почему бы не объединить каждый 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);
}
?>
вы, вероятно, пытаетесь запустить слишком много инструкций INSERT в одном запросе.
загляните в PDO и подготовленные операторы или используйте синтаксис SQL следующим образом:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Возможно ли, что одна из записей, которую вы пытаетесь вставить, содержит одну цитату? В этом случае произойдет ошибка, и цикл не завершится.
Вы всегда должны избегать значений, которые вы вставляете в базу данных с помощью mysql_real_escape_string, чтобы предотвратить подобные проблемы, и убедиться, что вы не уязвимы для sql injection.
$sql = "INSERT INTO `names`
(`id`, `name`)
VALUES
('',
'" . mysql_real_escape_string($new_array[$i]) . "'
)";