2015-11-06 3 views
2

Я вставляю файлы данных txt в свою базу данных MySQL. И файлы, которые содержат 100-400 слов, вставляются отлично. Нет проблем с ними. Но сегодня у меня есть файл с 9k словами, и мой скрипт перестает работать. Он ничего не вставляет или ничего не обновляет. У меня проблемы с моим скриптом или я должен делать части этого файла? Какое лучшее решение?Невозможно вставить слова 9k в базу данных mysql

Вот мой код:

//$arr - array from file; 

foreach ($arr as $temp) 
{ 
    $w_name = mysqli_real_escape_string($db_connect, $temp[0]); 
    $w_minprice = $temp[2]; 
    $w_js_id = $temp[1]; 
    $w_s = $temp[3]; 

    $sql ="SELECT `js_id` FROM `mytable` WHERE `js_id` = '$w_js_id' LIMIT 1"; 
    $result = mysqli_query($db_connect, $sql) or die(mysql_error()); 

    list($temp2) = mysqli_fetch_row($result); 

    if ($temp2 == '') 
    { 
     $sql = "INSERT INTO `mytable` (`name`, `minprice`, `s`, `js_id`, `pl`) VALUES ('$w_name', '$w_minprice', '$w_s', '$w_js_id', '$pl')"; 
     $result = mysqli_query($db_connect, $sql) or die(mysql_error()); 
     if ($result) {$added++;} 
    } 
    else 
    { 
     $sql = "UPDATE `mytable` SET `minprice` = '$w_minprice', `s` = '$g_s' WHERE `js_id` = '$w_js_id' LIMIT 1"; 
     $result = mysqli_query($db_connect, $sql) or die(mysql_error()); 
     if ($result) {$updated++;} 
    } 
} 

Возможно, я должен сделать несколько запросов? Или разделите мои запросы на 10? Но как? Я не уверен в MySQL-запросах. Моя цель - вставить массив с 9 000 значениями в мой db.

UPDATE: Я добавил следующие строки: ini_set ('memory_limit', '-1'); ini_set ('max_execution_time', '-1'); добавлено в мой mysql: max_allowed_packet = 32M;

И он решил мою проблему со сценарием!

+0

Что такое столбец Тип данных ? –

+0

Я подозреваю, что вы превысили длину, разрешенную типом данных столбца. – Alfie

+0

Если его 'TEXT' затем использует' LONGTEXT' –

ответ

1

выше сообщение о memory_limit и max_execution_time должны исправить вашу проблему. Для того, чтобы поймать любые вопросы PHP вы можете добавить

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
ini_set('memory_limit', '256M'); 
ini_set('max_execution_time', '240'); 

Я просто хочу, чтобы предложить более оптимальный способ сделать импорт, который сэкономит вам запрос и может работать быстрее

$sthi=mysqli_prepare($db_connect,"INSERT INTO `mytable` (`name`, `minprice`, `s`, `js_id`, `pl`) VALUES (?, ?, ?, ?, ?)") or die(mysqli_error($db_connect)); 
$sthi->bind_param("sssss", $w_name, $w_minprice,$w_s,$w_js_id,$pl); 
$sthu=mysqli_prepare($db_connect,"UPDATE `mytable` SET `minprice` = ?, `s` = ? WHERE `js_id` = ? LIMIT 1") or die(mysqli_error($db_connect)); 
$sthu->bind_param("sss", $w_minprice,$w_s,$w_js_id); 
$i=0; 
foreach ($arr as $temp) { 
    $w_name = $temp[0]; 
    $w_minprice = $temp[2]; 
    $w_js_id = $temp[1]; 
    $w_s = $temp[3]; 

    @$sthi->execute(); 
    //If insert was unsuccessfull the record already exists 
    if($sthi->affected_rows==1){ 
    $added++; 
    } 
    //Otherwise you need to update it - run the update startement 
    else { 
    if($sthu->execute()){ 
     if($sthu->affected_rows==1){ 
     $updated++; 
     } 
    } 
    else echo $sthu->error."<br>"; 
    } 
    flush(); 
    set_time_limit(30); 

    //Not really necessary - just for debugging 
    echo ++$i." u:".$updated." a:".$added."<br>"; 
} 
+0

большое спасибо. собираюсь попробовать это.Но мой код не работает даже с ограничением памяти – mrdeath4

+0

да код более или менее точный, это спасет вас вызов базы данных на каждой записи и, вероятно, будет работать немного быстрее –

+0

Я добавил этот код в свой php-файл. и получил 500 eror в браузере. Теперь я не могу запустить этот файл даже пустым. Что бы это могло быть? – mrdeath4

2

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

ini_set('memory_limit', '-1'); 
ini_set('max_execution_time', '-1'); 
+0

нет. Всего 1779 echos в моем цикле и после того, как скрипт не работает, и никаких эхо-сигналов после – mrdeath4

+0

Я могу добавить что-то в мой цикл 1500 раз, и все работает хорошо. Но не более 2 000 – mrdeath4

+0

Ваш скрипт заканчивается. Вы добавили 2 строки в свой пост и снова попробуйте запустить скрипт? – Samir

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