LINUX.ORG.RU

PHP - execute

 , , ,


2

1

Уважаемые форумчане! Требуется ваша помощь!

Подскажите, как эффективно и просто решить задачу:

Есть массив (кстати, может заменить на объект?) и две таблицы в базе данных:

$massive = [

'animal' => 'cat',
'age' => '1',
'color' => 'gray'

];

$db = new PDO('sqlite:file.sqlite');

$db -> exec("CREATE TABLE IF NOT EXISTS 'table1' (
id INTEGER PRIMARY KEY AUTOINCREMENT,

animal TEXT,
age INTEGER

)");

$db -> exec("CREATE TABLE IF NOT EXISTS 'table2' (
id INTEGER PRIMARY KEY AUTOINCREMENT,

animal TEXT,
color TEXT

)");

$prepare1 = $db -> prepare("INSERT INTO 'table1' (animal, age) VALUES (:animal, :age)");
$prepare2 = $db -> prepare("INSERT INTO 'table2' (animal, color) VALUES (:animal, :color)");

Цель: записать массив в обе таблицы. Вроде просто и не было бы вопроса, если бы можно было этот массив отдать в execute и он сам взял что ему необходимо, но насколько я знаю, больше чем нужно параметров нельзя указывать.

Прошу учесть, что задача упрощена! В таблицах куча колонок, а не по две как здесь, поэтому их перечисление трудоёмко, это и заставляет искать иные способы!

Засунь запросы в массив и крутани их в лупе, фильтруя нужные данные.

foreach ($queries as $query) {
    preg_match_all('/:([a-z]+)/', $query, $keys);
   
    $db->prepare($query)->execute(
        array_filter($massive, function ($key) use (&$keys) {
            return in_array($key, $keys[1]);
        }, ARRAY_FILTER_USE_KEY)
    );
}
anonymous ()
Ответ на: комментарий от anonymous

О, круто и элегантно! Мне бы такое в голову не пришло. :)

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.