2017-04-07 5 views
-2

ファイルから読み込んでdbに挿入するために1000レコードを挿入する必要がありますが、コードは100回以上動作していません。それはinternal server 500と言いますが、100回以下のコードを実行するとうまく動作します。 100以上のレコードを挿入するために適用する必要がある設定はありますか?100以上のINSERTクエリを呼び出すことはできません

<?php 
    $servername = "**"; 
    $username = "**"; 
    $password = "**"; 
    $dbname = "**"; 

    $con=mysqli_connect($servername, $username, $password,$dbname); 

    for($i=0; $i<400; $i++){ 

     $query = mysqli_query($con,"INSERT INTO table_name (column1, column2, column3) 
            VALUES (value1, value2, value3)");   
    } 

    $query->close(); 
    $con->close(); 
?> 

それだけで100回を働いている:

は、ここに私のコードです。ループをそれ以上に動かすように設定すると、何のアイデアも出ませんか?

+0

は、それがどんなエラーが発生しているのですか? –

+0

'ini_set( 'display_errors'、1);を追加します。 ini_set( 'log_errors'、1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 'をスクリプトの先頭に追加します。これにより、 'mysqli_'エラーは、あなたが見逃したり無視したりすることができないように、例外を生成するための に強制されます。 – RiggsFolly

+1

実際にはそのコードは1行をロードしません。実際に使用しているクエリを追加してください。 _疑似回答が必要な場合以外は疑似コードをデバッグできません_ – RiggsFolly

答えて

0

これで問題が解消されるかどうかは不明ですが、コード内のデータベース呼び出しの総量を減らすことをお勧めします。

同じテーブルにINSERTするので、すべての操作を1回のクエリで実行できます。ループ内で単一のクエリを構築し、ループが終了した後でmysqli_query()を1回だけ使用します。

コード:

$values=""; 
for($i=0; $i<400; $i++){ 
    $values.=($i==0?"",",")."('value1','value2','value3')"; 
} 
$query=mysqli_query($con,"INSERT INTO table_name (column1, column2, column3) VALUES $values; 
+0

@ NiteshSharmaこれで問題が解決した場合は、私の答えに緑のチックを付けることができますが、100回のクエリで一度壊れた設定の種類については実際には説明できません。それでも技術的な問題が発生している場合は、コメントを残すか、質問を更新してください。 – mickmackusa

0

注意してください)

function interpolate($message, array $context = [], $openTag = '{', $closeTag = '}') 
{ 
    // build a replacement array with braces around the context keys 
    $replace = array(); 
    foreach ($context as $key => $val) { 
     // check that the value can be casted to string 
     if (!is_array($val) && (!is_object($val) || method_exists($val, '__toString'))) { 
      $replace[$openTag . $key . $closeTag] = $val; 
     } 
    } 

    // interpolate replacement values into the message and return 
    return strtr($message, $replace); 
} 

function interpolatedQuery($conn, $query, array $context = []) 
{ 
    $sql = interpolate($query, $context); 
    $result = mysqli_query($sql); 
    if (!$result && mysqli_connect_errno() && in_array(mysqli_connect_errno(), [1213, 1614])) { 
     // deadlock 
     usleep(50000); 
     return interpolatedQuery($conn, $query, array $context); 
    } 
    return $result; 
} 

$values = []; 
foreach ($records as $record) { 
    $values[] = interpolate(
     '({value1}, {value2}, {value3})', 
     [ 
      'value1' => $record['id'], 
      'value2' => '"' . mysqli_real_escape_string($record['name']) . '"', 
      'value3' => 'NULL' 
     ] 
    ); 
} 

if (count($values)) { 
    $chunks = array_chunk($values, 1000); 
    foreach ($chunks as $chunk) { 
     interpolatedQuery(
      'INSERT INTO table_name (column1, column2, column3) VALUES{values}', 
      [ 
       'values' => implode(', ', $chunk) 
      ] 
     ); 
    } 
} 
関連する問題