2011-07-30 13 views
1

PHPを使ってmysqlテーブルに複数の行を挿入したいと思います。データは配列になっており、次のコードを使用しようとしていますが、動作しません。私を助けてください。PHP配列をMySQLテーブルに個々の行として挿入します。

クエリ文字列は次のとおりです。

for ($i=1;$i=$rowcount;$i++)

は、これはおそらく次のようになります:

new_document.php?doctype=Inv&paytype=u&docno=3&bookno=31&prname=40329&pename=1001&paydate=07%2F22%2F2011&indate=7%2F30%2F2011&accname1=Man+Site&DrAmount1=20&CrAmount1=1&accname2=Man+Site&DrAmount2=0&CrAmount2=5&ref=Jul%2F2011 
これは乱暴に安全ではないという事実を無視して

$rows = explode("&", $_SERVER['QUERY_STRING']); 
    $rowcount =((count($rows)-9)/3); // Count set of rows received , 9 is the costant no of inputs 

    $serialno = array(); 
    $acc_name = array(); 
    $debit = array(); 
    $credit = array(); 

    $serialno [] = $i; 
    array_unshift($serialno,""); 
    unset($serialno[0]); 

    $acc_name[] = ($_GET['accname'.$i]); 
    array_unshift($acc_name,""); 
    unset($acc_name[0]); 

    $debit[] = ($_GET['DrAmount'.$i]); 
    array_unshift($debit,""); 
    unset($debit[0]); 

    $credit[] = ($_GET['CrAmount'.$i]); 
    array_unshift($credit,""); 
    unset($credit[0]); 



    echo 'Serial Numbers : '.print_r($serialno); 
    echo '<br>A/C Names : '.print_r($acc_name); 
    echo '<br>Debit Amount : '.print_r($debit); 
    echo '<br>Credit Amount : '.print_r($credit); 

    This gives me following result : 
    ARRAY 
    (
    [1] => 1 
    [2] => 2 
    ) 
    SERIAL NUMBERS : 1ARRAY 
    (
    [1] => MAN SITE 
    [2] => MAN SITE 
    ) 

    A/C NAMES : 1ARRAY 
    (
    [1] => 20 
    [2] => 0 
    ) 

    DEBIT AMOUNT : 1ARRAY 
    (
    [1] => 1 
    [2] => 5 
    ) 

    CREDIT AMOUNT : 1 


    for ($i=1;$i=$rowcount;$i++) 
    { 
    $amount = ($debit[$i]-$credit[$i]); 
    $accname=$acc_name[$i]; 

    $insert2 = "INSERT INTO `khata2`.`docitems` 
    (
    `dateinput`, 
    `docno`, 
    `itemno`, 
    `accountname`, 
    `amount`, 
    `picrefno`, 
    `updatestamp`) 
    VALUES (
    NOW(''), 
    '$docno', 
    '$i', 
    '$accname', 
    '$amount', 
    '$docno', 
    Null)";  
    } 
    if (!mysql_query($insert2)){ 
    echo '<br><a style="color:RED">Zero</a> items saved! Try Again..<br>'; 

    die('Error: ' . mysql_error()); 
    break; 
    } 
    echo '<br><a style="color:GREEN">'.$rowcount.' </a>record inserted.'; 
    exit(); 


    RESULTS AS : 
    Fatal error: Maximum execution time of 30 seconds exceeded in F:\server\htdocs\xampp\Khata2\processor\new_document.php on line 184 (Line 184 is '$amount',) 

答えて

0

1)

INSERTY INTO table(field1,field2) VALUES(v11,v12),(v21,v22),(v31,v32); 

$insert2=array(); 
for ($i=1;$i=$rowcount;$i++) 
{ 
    $amount = ($debit[$i]-$credit[$i]); 
    $accname=$acc_name[$i]; 

    $insert2[] = "(
    `dateinput`, 
    `docno`, 
    `itemno`, 
    `accountname`, 
    `amount`, 
    `picrefno`, 
    `updatestamp`) 
    VALUES (
    NOW(''), 
    '$docno', 
    '$i', 
    '$accname', 
    '$amount', 
    '$docno', 
    Null)";  
} 
if (!mysql_query('INSERT INTO tblname VALUES'.implode(',',$insert2))){ 
    echo '<br><a style="color:RED">Zero</a> items saved! Try Again..<br>'; 

    die('Error: ' . mysql_error()); 
    break; 
} 

3)プリペアドステートメントを使用したPDOまたはmysqliは素晴らしいです;)

1

、ここにあなたの問題です

for ($i=1;$i<$rowcount;$i++)

ここで、$ rowcountを$ iに割り当てます。これは常にtrueです。したがって、forループは決して終了しません。

for ($i=1;$i<=$rowcount;$i++){ 
    //generate query 
} 
//do query 

しかしyoouが必要です:あなたが使用することができ

for ($i=1;$i<=$rowcount;$i++){ 
    //generate query 
    //do query 
} 

2)たぶんいくつかは、より高速なすべての行に対して1つのクエリより1つのクエリを実行することになりますあなたが

+0

返信いただきありがとうございます。現在は動作していますが、配列の最後の値を挿入するだけです。すべてのアイデア私は間違って何をしていますか?乾杯(痛みを伴っています)また、私が望む結果を得るために使用できるその他のものは何ですか? – user837168

+0

PHPは最初の配列をスキップしている可能性があります。なぜなら、PHPは配列が0ではなく1から始まるためです。したがって、forループを0から開始するように変更してください。 – evan

関連する問題