0

'assess_2012'というテーブルからレコードを取得し、'assess_2012_err'というテーブルに書き込む必要のあるレコードを多次元配列に格納するBash/PHPスクリプトを入手しました。

#!/usr/bin/php -q

<?php
$host = "localhost";
$user = "username";
$pass = "password";
$name = "reassess";

$conn = mysqli_connect($host, $user, $pass, $name) OR die ("Could not connect to database: " . mysqli_error($conn) . "\n");

$q = "SELECT su_id, ass_date, ind_d FROM assess_2012";
$r = mysqli_query ($conn, $q);

if ($r) {
    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {

        // Check for errors:
        if ($row['ind_d'] == 'Y') {
            // Add to the array:
            $sql[] = array('su_id' => $row['su_id'], 'err_code' => 1);
        }
    }
    var_dump($sql);
}
else {
    // SELECT query failed:
    echo "Error: " . mysqli_error($conn) . "\n";
}
?>

'var_dump'は次のようになります(短縮バージョン-実際のクエリは数百のレコードを返します):

array(1) {
  [0]=>
  array(2) 
    ["su_id"]=>
    string(1) "5"
    ["err_code"]=>
    int(1)
  }
  [1]=>
  array(2) {
    ["su_id"]=>
    string(4) "1492"
    ["err_code"]=>
    int(1)
  }
}

私が理解できないのは、配列を使用して次のようなクエリを生成する方法です。

INSERT INTO assess_2012_err (su_id, err_code) VALUES (5, 1), (1492, 1)
4

2 に答える 2

2

データベースに値を入力するときに、 foreachループを使用してデータをループします。

お気に入り:

foreach($sql as $key=>$value){

        foreach($value as $key_p=>$value_p){

            //Implement Query here
           //R.g
          //$key will have 'su_id'
         //$value_p will have 1

            }
}
于 2012-10-24T23:22:58.970 に答える
1

みたいに一つずつやった方がいいよ

foreach($sql as $variables)
{
  // Insert here: 
  INSERT INTO asses_2012_err (su_id, err_code) VALUES ($variables['su_id'], $variables['err_code']);

}

心に留めておくべきいくつかの重要な点:

  • これらの入力をユーザー入力として扱い、サニタイズしてください!
  • mysql_* 関数は非推奨になるため、PDO を使用してみてください
  • データ抽象化レイヤーを検討してください(すべてのクエリがナイス関数内に隠されているため)
于 2012-10-24T23:27:05.967 に答える