2014-01-26 5 views
0

У меня есть batchcode.txt, который содержит список пакетного кода.Как вставить текстовый файл в таблицу базы данных mysql

645863 
302422 
430307 
821773 
599738 
671768 
732159 

и так далее

У меня есть таблица в моей базе данных, которая называется batchcode с полями «ид», «batchcode».

Моя проблема в том, что он не будет вставлять мой текстовый файл в мою таблицу с именем batchcode. Я уже сделал таблицу импорта и выбора, но ничего не работает ...

Мне нужна помощь, кто-нибудь может мне помочь.

<?php 
$host= "localhost"; 
$user= "root"; 
$pass= ""; 
$db="klayton"; 

$connect= mysql_connect($host,$user,$pass); 
if (!$connect)die ("Cannot connect!"); 
mysql_select_db($db, $connect); 

$file = fopen("batchcode.txt","r"); 

while(! feof($file)) 
{ 
$sql = "INSERT INTO batchcode(batchcode) VALUES ('fgets($file)')"; //Insert every read line from txt to mysql database 
mysql_query($sql); 
} 
fclose($file); 
?> 

я получил ошибку, которая говорит: "Фатальная ошибка: Максимальное время выполнения 30 секунд превышены в C: \ XAMPP \ HTDOCS \ Test \ index.php в строке 22"

+1

Насколько велик 'batchcode.txt' на практике (мегабайт или терабайт)? У вас есть sysadmin-доступ к серверу (Web & PHP)? –

+2

Почему вы не пытаетесь выполнить вставку в одном запросе –

+3

PHP-скрипт, который вы разместили здесь, не содержит 22 строк. Во всяком случае, слегка связанная проблема: функция 'fgets()' не будет называться так, как она написана в данный момент. Вам нужно связать значение вместо этого, то есть '$ sql =" INSERT INTO batchcode (batchcode) VALUES ('".fgets ($ file)."') ";' - Обратите внимание, что это все еще ** уязвимо для SQL-инъекции, хотя **. Вы должны прекратить использовать устаревшие функции 'mysql_ *' и переключиться на MySQLi/PDO (и начать использовать подготовленные инструкции, чтобы у вас не было риска инъекций SQL). –

ответ

1

С вашим текущим кодом функция fgets($file) никогда не будет выполнена, поэтому ! feof($file) всегда будет true, а цикл while будет работать до ограничения времени выполнения.

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

while($batchcode = fgets($file)) 
{ 
    $sql = "INSERT INTO batchcode(batchcode) VALUES ('$batchcode')"; 
    mysql_query($sql); 
}  
+0

не работает чувак ... он хранит много fgets (Array) не фактический штрихкод – user3235574

+0

Я только что обновил свой ответ – vidaica

+0

Спасибо, что он работает сейчас: D – user3235574

1

Когда PHP не в сейфе режим можно использовать max_execution_time

ini_set('max_execution_time', 0); //0 unlimited time, best to use a high number 

Имея один запрос в строке не является хорошим ideea. Занимает много времени, так как после каждой вставки любые индексы перестраиваются. Вы можете использовать LOAD DATA LOCAL INFILE нравится:

LOAD DATA LOCAL INFILE 'C:\\bigfile.txt' INTO TABLE `database`.`batchcode` LINES TERMINATED BY '\r\n' (`batchcode `); 

с помощью \ г \ п или \ п зависит от вашего файла. Путь к файлу должен находиться в вашем клиенте mysql.

Смежные вопросы