@pasterh

Как записать несколько массивов через pdo?

Есть 4 массива
$one(
 [0] => value,
 [1] => value1,
 [2] => value2,
)
$two(
[0] => value3,
[1] => value4,
[2] => value5,
)
$three(
[0] => value5,
[1] => value7,
[2] => value8,
)
$four(
[0] => value9,
[1] => value10,
[2] => value11,
)

$sql = 'INSERT INTO myarr ( one, two, three, four)'
                . 'VALUES (:one, :two, :three, :four)';
//Нашёл  что  в  pdo массив  можно записать через цикл  foreach и транзакцию.
$mass = $db->prepare($sql);
$db->beginTransaction(); 
foreach ($one as $ones){
$mass->bindValue(':ones', $ones, PDO::PARAM_STR);
$mass->execute();
}
$db->commit();

Но как я понимаю с несколькими массивами данный способ не работает. Какие есть варианты записать несколько массивов в таблицу.
  • Вопрос задан
  • 197 просмотров
Пригласить эксперта
Ответы на вопрос 3
@FanatPHP
У тебя не должно быть несколько отдельных массивов. В худшем случае должен быть массив с вложенными массивами. В остальном ни малейших проблем
$all = array('one' =>(
 [0] => value,
 [1] => value1,
 [2] => value2,
),
'two' => (
[0] => value3,
[1] => value4,
[2] => value5,
).
'three' => (
[0] => value5,
[1] => value7,
[2] => value8,
),
'four' => (
[0] => value9,
[1] => value10,
[2] => value11,
));
$sql = 'INSERT INTO myarr ( one, two, three, four)'
                . 'VALUES (?, ?, ?, ?)';
//Нашёл  что  в  pdo массив  можно записать через цикл  foreach и транзакцию.
$stmt = $db->prepare($sql);
$db->beginTransaction(); 
foreach ($all as $i =>$one){
    $stmt->execute([$one, $all['two'][$i],$all['three'][$i],$all['four'][$i]]);
}
$db->commit();

Это при твоей кривой организации массивов
с нормальным массивом будет
foreach ($all as $row){
    $stmt->execute($row);
}
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
@KingstonKMS
full-stack web developer
Вы сначала определитесь в каком формате хранить массивы в таблице, а потом думайте как их туда сохранить
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы