2014-08-28 3 views
0

Я следующий сценарий, который я написал:Php скрипт только вставив 5000 строк в базу данных PhpMyAdmin

<?php 

$filename = "readingDataFromThis.LOG"; 
$filterarray= array("stuff to remove from the file", "and more stuff"); 
if (file_exists($filename) && is_readable ($filename)) { 
    ini_set('memory_limit','16M'); 
    ini_set('max_execution_time', 600); 
    $con=mysqli_connect("server","username","password","database_name"); 
    $count = 0; 

    $fh = fopen($filename, "r"); 
    if ($fh) { 
     while (($line = fgets($fh)) != false) { 

      if (mysqli_connect_errno()) { 
       echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
      } 
      if (strpos_arr($line, $filterarray) == false) { 
       $month = substr($line, 3,5); 
       $day = substr($line, 0,2); 
       $year = substr($line, 6,8); 
       $timestamp = substr($line, 9, 17); 
       $message = substr($line, 18); 

       mysqli_query($con,"INSERT INTO Conversation (Month, Day, Year, Time, Message) 
       VALUES ('$month', '$day', '$year', '$timestamp', '$message')"); 
       echo "Inserted record " . $count++ . "<br>"; 
      } 
     } 
    } 
    fclose($fh); 
    mysqli_close($con); 
    echo "Complete."; 
} 

function strpos_arr($haystack, $needle) { 
    if(!is_array($needle)) $needle = array($needle); 
    foreach($needle as $what) { 
     if(($pos = strpos($haystack, $what))!==false) return $pos; 
    } 
    return false; 
} 
?> 

Когда я запускаю его, у меня нет никаких проблем, выход я получаю на экране в основном выглядит следующим образом:

Inserted record 0 
Inserted record 1 
... 
Inserted record 14000+ 
Complete. 

Однако, когда я иду к столу в самой базе данных, я считаю, что только ТОЧНО первые 5000 записей вставлены в базу данных. Что здесь происходит?

+3

'phpMyAdmin' имеет ограничение на количество строк, которое будет отображаться сразу. Вы уверены, что это не то, над чем вы работаете? Что делает 'SELECT COUNT (*) FROM Convers' show? – Barmar

+0

SELECT COUNT (*) FROM Диалог > Возвраты> COUNT (*) ---- Итак, я вставил одну запись вручную, и я могу видеть 5001 записи из моего основного представления таблицы. – cuckoo

+0

У любого столбца есть уникальные индексы? У вас могут быть дубликаты. – Barmar

ответ

0

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

$message = mysqli_real_escape_string($con, substr($line, 18)); 

, чтобы гарантировать, что сообщение может быть заменен в запрос правильно. В противном случае, если $message содержит символ кавычки, вы получаете недействительный синтаксис SQL, когда он будет подбираться в запрос.

Было бы лучше перекодировать, используя mysqli_prepare() и mysqli_stmt_bind_param().

0

Возможно ли, что они дублируются на вашем Клюфе, таким образом, не вставлены или не обновляются предыдущие значения. Если это займет слишком много времени, это может быть просто тайм-аут. Однако у PHPMyAdmin есть функция, которая остановит выполнение, если время ожидания будет достигнуто, что также означает, что он позволит вам возобновить работу в нужном месте.

+1

Если бы это было тайм-аут, как бы он распечатывал все строки «Вставленные записи N»? И он уже сказал в комментарии, что нет дубликатов данных. – Barmar

+2

Он не использует PHPMyAdmin для создания вставок, он использует PHP-скрипт. – Barmar

0

Работа с Barmar в дискуссии, мы в конечном итоге изменения следующие строки кода:

$message = mysqli_real_escape_string($con,substr($line, 18)); 

Это по существу обрабатывает странные строки текста, которые имеют такие символы, как "в них, которые будут нарушать синтаксис оператор SQL INSERT.

mysqli_query($con,"INSERT INTO Conversation (Month, Day, Year, Time, Message) 
    VALUES ('$month', '$day', '$year', '$timestamp', '$message')") or die(mysqli_error($con)); 

В этом блоке кода, мы добавили или умереть (mysqli_error ($ CON));

Это говорит программе о прекращении выполнения и выдаче ошибки относительно причины. Это дало мне следующую ошибку:

пользователя my_sa 'превысил ресурс «max_updates» (текущее значение: 5000)

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

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