Как вставить значения из массива в БД?

Главные вкладки

Аватар пользователя shlop shlop 13 декабря 2017 в 7:38

Здравствуйте, подскажите пожалуйста. У меня вот есть массива, <?php $ArrayTable1 ?> он многомерный. Массив массивов можно сказать, хранит в себе 7 массивов. Для каждого массива, в таблице в БД есть свой столбец. Подскажите пожалуйста как с помощью <?php db_insert() ?> произвести множественную вставку? Вот я пробовал вот так вставить, пока что в один столбец.

<?php
    $query 
db_insert('table1')->fields(array('nagruz_Lg'));
    foreach(
$ArrayTable1 as $i => $massiv) {
        foreach(
$massiv as $j => $value) {
        
$query->values($value);
        }
    }
    
$query->execute();
?>

Но выдает ошибку вот такую: Recoverable fatal error: Argument 1 passed to InsertQuery::values() must be of the type array, string given, called in C:\Open\OpenServer\domains\drupal\sites\all\modules\setdb\setdb.module on line 344 and defined в функции InsertQuery->values() (строка 557 в файле C:\Open\OpenServer\domains\drupal\includes\database\query.inc).

Подскажите пожалуйста, как исправить, или может быть я вообще не верно делаю цикл. Заранее благодарю за ответ

Лучший ответ

Аватар пользователя shlop shlop 13 декабря 2017 в 10:16

Вроде бы нашел решение, думаю делать вот так:

<?php
    $fields 
= array(
        
'data' => serialize($ArrayTable1),
        );
    
db_insert('test')->fields($fields)->execute();?>

Записывать массив в БД с помощью функции serialize, то есть представлять весь массив как одну строку, а потом unserialize, нашел информацию на сайте - https://ruseller.com/lessons.php?id=699&rub=37,
спасибо большое за помощь)

Комментарии

Аватар пользователя bumble bumble 13 декабря 2017 в 8:04

Так пробуйте:

<?php
$query 
db_insert('table1')->fields(array('nagruz_Lg'));
foreach(
$ArrayTable1 as $massiv) {
    
$query->values($massiv);
}
$query->execute();
?>
Аватар пользователя shlop shlop 13 декабря 2017 в 9:22

Ради теста попробовал вот так, всё работает) сейчас теперь со своим вариантом буду пробовать

<?php
    
for($i 0$i 5$i++) {
    
$fields = array(
    
'test1' => $i,
    );
    
db_insert('test')->fields($fields)->execute();
    }
?>
Аватар пользователя shlop shlop 13 декабря 2017 в 9:46

Вот блин, а с этой таблицей

<?php
    
for($i 0$i 5$i++) {
    
$fields = array(
    
'nagruz_Lg' => $i,
    );
    
db_insert('table1')->fields($fields)->execute();
    }
?>

Ошибка - PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'u0421090_default.table1' doesn't exist: INSERT INTO {table1} (nagruz_Lg) VALUES (:db_insert_placeholder_0); Array ( [:db_insert_placeholder_0] => 0 ) в функции dbsubmit()

Аватар пользователя shlop shlop 13 декабря 2017 в 10:16

Вроде бы нашел решение, думаю делать вот так:

<?php
    $fields 
= array(
        
'data' => serialize($ArrayTable1),
        );
    
db_insert('test')->fields($fields)->execute();?>

Записывать массив в БД с помощью функции serialize, то есть представлять весь массив как одну строку, а потом unserialize, нашел информацию на сайте - https://ruseller.com/lessons.php?id=699&rub=37,
спасибо большое за помощь)