2016-04-11 6 views
1

私は3つの配列を持ち、データベースに書きたいと思っています。特定の列に値が書き込まれるたびに、残りの列は空のままです。 foreachを使用してデータベースに書き込む

$name_array = array(3) { [0]"Name1" [1]=>"Name2" [2]=> "Name3" } 
$roll_array = array(3) { [0]=>"1" [1]=>"2" [2]=>"3" } 
$att_array = array(3) { [0]=>"Present" [1]=>"Present" [2]=>"absent" } 

私はDB内の3つの列「NAME」「ROLL」「出席」私は同時に、データベースへのすべての配列データを保存したい を持っています。 それがこの

NAME  ROLL  ATTENDANCE 
Name1  1   present 
Name2  2   present 
Name3  3   absent 

のようになります。ここで私がしようとしたが、それはただの列にそれぞれの値を追加して、空の他の列を残しコードがあります。したがって、最初の3行はROLLNOのみを持ち、次の3行はNAMEのみを持ち、最後の3行はATTENDANCEのみを持ちます。

$name_values = array(); 
$roll_values = array(); 
$att_values = array(); 


foreach ($name_array as $key => $name_values) { 

    $name_values = mysqli_real_escape_string($connection,$name_values); 
    $sql= "INSERT INTO `aclass12` (Name) VALUES ('$name_values')"; 
    mysqli_query($connection,$sql); 

} 

foreach ($roll_array as $key => $roll_values) { 
    $roll_values = mysqli_real_escape_string($connection,$roll_values); 
    $sql= "INSERT INTO `aclass12` (RollNo) VALUES ('$roll_values')"; 
} 

foreach ($att_array as $key => $att_values) { 
    $att_values = mysqli_real_escape_string($connection,$att_values); 
    $sql= "INSERT INTO `aclass12` (attendance) VALUES ('$att_values')"; 
} 

これは正しい方法ではありません。これを行う方法は何ですか?

+1

各foreachが1行のデータ(名前、ロール、出席)であるように配列を並べ替え、1つのクエリに3つの値をすべて挿入します。 – JimL

答えて

0
foreach($name_array as $n_k=>$name) { 
    $roll = (isset($roll_array[$n_k])) ? $roll_array[$n_k] : ''; 
    $att = (isset($att_array[$n_k])) ? $att_array[$n_k] : ''; 
    $name = mysqli_real_escape_string($connection,$name); 
    $roll = mysqli_real_escape_string($connection,$roll); 
    $att = mysqli_real_escape_string($connection,$att); 
    $sql= "INSERT INTO `aclass12` (Name, RollNo, attendance) VALUES ('$name','$roll','$att')"; 
    mysqli_query($connection,$sql); 
} 
+0

挿入文を修正してください –

+0

今はうまくいくと思います – Eugene

+0

はいいいえ –

0

foreachを1つだけ使用し、そこで配列の要素にアクセスします。

また、SQL njection攻撃を防止するため、プリペアドステートメントを使用することをお勧めします。詳細情報here

0

は、他のオプションは、foreachので多次元配列を使用することです

for($i = 0; $i < count($name_array);$i++) { 
    $name_values = mysqli_real_escape_string($connection,$name_array[$i]); 
    $roll_values = mysqli_real_escape_string($connection,$roll_array[$i]); 
    $att_values = mysqli_real_escape_string($connection,$att_array[$i]); 
    $sql= "INSERT INTO `aclass12` (Name, RollNo, attendance) VALUES ('$name_values', '$roll_values','$att_values')"; 
} 

この方法をお試しください。

3

マスターとして1つのアレイを使用し、そのアレイのキーを他の2つのアレイデータにアクセスするだけです。その後

INSERTは、実際に働いていたので、私は、私はそれを思います

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

    $name = mysqli_real_escape_string($connection,$value); 
    $roll = mysqli_real_escape_string($connection,$roll_values[$key]); 
    $att = mysqli_real_escape_string($connection,$att_array[$key]); 

    $sql = "INSERT INTO `aclass12` 
        (Name, RollNo, attendance) 
      VALUES ('$value', '$roll', '$att')"; 

    $res = mysqli_query($connection,$sql); 
    if ($res === FALSE) { 
     echo mysqli_error(); 
     exit; 
    } 

} 
0

エラーチェックを少し追加したことを確認するために、単一のINSERT内のすべてのデータも

その良いアイデアを挿入それを挿入し、それ以前のすべてを単純に連結するためにmysqlクエリー以来使用するのが最善でしょう。これは次のようなものです:

$query = "INSERT INTO tbl_name (col1, col2, col3) VALUES "; 

for ($i = 0; $i < count($name_array); $i++) { 
    $name = mysqli_real_escape_string($conn, $name_array[$i]); 
    $roll = mysqli_real_escape_string($conn, $roll_array[$i]); 
    $att = mysqli_real_escape_string($conn, $att_array[$i]); 
    $query .= "('{$name}', '{$roll}', '{$att}'),";  
} 

$query = trim($query, ','); 
$query = $query . ';'; 
mysqli_query($connection,$sql); 

ダメージコントロールを追加してください(エラーを確認してください)。

関連する問題