使用foreach写入数据库


Writing to database using 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中有三列"NAME"ROLL"ATTENDANCE"我想同时将所有数组数据存储到数据库中。所以它应该看起来像这个

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

这是我尝试过的代码,但它只是将每个值添加到列中,并将另一列留空。所以前三行只有ROLLNO,下三行只有NAME,最后三行只有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')";
}

我知道这样做不对。怎么做?

只需使用一个数组作为主数组,并使用该数组的键来访问其他两个数组的数据。

然后在单个insert 中插入所有数据

检查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;
    }
}

只使用一个foreach并访问那里的数组元素。像这样:

foreach ($name_array as $key => $name_values) {
    $name_values = mysqli_real_escape_string($connection,$name_values);
    $roll_values = mysqli_real_escape_string($connection,$roll_array[$key]);
    $att_values = mysqli_real_escape_string($connection,$att_array[$key]);
    $sql= "INSERT INTO `aclass12` (Name, RollNo, attendance) VALUES ('$name_values', '$roll_values', '$att_values')";
    mysqli_query($connection,$sql);
}

此外,建议使用准备好的语句,因为它们可以防止SQL注入攻击。点击此处了解更多信息。

用这种方法试试

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')";
}

另一种选择是将多维数组与foreach一起使用。

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);
}

我确实认为最好使用自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);

在那里添加一些伤害控制(检查错误),就这样了。