2016-04-11 3 views
1

У меня есть три массива, и я хочу записать их в базу данных. Проблема, с которой я сталкиваюсь, - это когда значения записываются в конкретный столбец, остальная часть столбца остается пустой. Запись в базу данных с использованием 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" } 

У меня есть три столбца в БД «NAME» «ROLL» «УЧАСТВОВАВШИЕ» Я хочу, чтобы хранить все данные массива в базу данных одновременно. поэтому он должен выглядеть следующим образом

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

Вот код, я пытался, но это просто добавьте каждое значение столбца и оставляет другой столбец пусты. Таким образом, первые три строки имеют только ROLLNO, а следующие три строки имеют только NAME, а последние три строки имеют только УЧАСТИЕ.

$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 представлял собой одну строку данных (имя, рулон, посещаемость), а затем вставлял все три значения в один запрос. – 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 и получайте доступ к элементам массивов. Например:

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-атак. Дополнительная информация here.

0

Попробуй эти способы

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

Просто используйте один массив в качестве ведущего устройства и ключ этого массива для доступа к двум другим данным массивов.

Затем вставьте все данные в одном 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

Я думаю, что это было бы лучше всего использовать, поскольку запрос 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); 

Добавить контроль повреждений (проверьте наличие ошибок) и все.

Смежные вопросы