массовая вставка данных - PullRequest
0 голосов
/ 17 августа 2011

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

$num=35; //number of columns
$dum=true; // a check
$sum=0;// count total entries

if (($handle = fopen($_FILES['file']['name'], 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 10000, ',')) !== FALSE)
{
    if($dum)
        {
    for ($qwe=0; $qwe < $num; $qwe++) { //searching the columns exact position in case they have been changed 

            if($data[$qwe]=='ID')
            {$a=$qwe;}
            .
                            .
                            .
                            .
                            .else if($data[$qwe]=='PowerMeterSerial')
            {$aa=$qwe;}
            else if($data[$qwe]=='Region')
            {$ab=$qwe;}
            else if($data[$qwe]=='Questions')
            {$ac=$qwe;}

        } 
     }
    if(!$dum)
    {

      for($qwe=0;$qwe<$num;$qwe++)
      { 
           if($qwe==7||$qwe==8)
           { 
           if($qwe==7){$asd=$data[$qwe];}
           $data[$qwe]=date('Y-m-d h-i-s',strtotime($data[$qwe]));
           }
       }


       $data[57]=date('Y-m-d ',strtotime($asd));try { 

        $sql="INSERT INTO pm (ID, .......... Questions, dateofdata ,Unsuccessful) VALUES ('$data[$a]','$data[$b]','$data[$c]','$data[$d]','$data[$e]','$data[$f]','$data[$g]','$data[$h]' ,'$data[$i]','$data[$j]','$data[$k]', '$data[$l]', '$data[$m]','$data[$n]','$data[$o]','$data[$p]','$data[$q]','$data[$r]','$data[$s]','$data[$t]','$data[$u]','$data[$v]','$data[$w]', '$data[$x]','$data[$y]','$data[$z]','$data[$aa]','$data[$ab]','$data[$ac]','$data[57]','$data[30]')";
      if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error(). $sql);
      }

      }
      catch (Exception $e)
      {
     echo'<br>'; echo $sql;
      }
    $sum++;

    }$dum=false;
  }

}
?> 

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

1 Ответ

0 голосов
/ 17 августа 2011

Измените команду die() на print(). Вы увидите, в чем заключалась ошибка, и скрипт перейдет к следующей строке.

Учитывая структуру вашего кода, я предполагаю, что он взорвется каждый раз, когда вы вставляете строку (особенно с кавычками внутри нее), вызывая ошибки синтаксиса SQL. Вы ДОЛЖНЫ передавать каждое текстовое поле из CSV через mysql_real_escape_string() ДО того, как вставить эти значения в строку запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...