0
爲什麼語句1按預期工作,這意味着它會在每行中插入不同的值。但是語句2總是爲每個父循環插入相同的語句,因此對於執行語句2的每個子排除行將會有重複的行?php pdo插入循環中
function insert($db, $data)
{
$stmt1 = $db->prepare("
INSERT INTO table1(
`order`, `parent_id`, `caption`, `caption2`
) VALUES(
:order, :parent_id, :caption, :caption2,
)
");
$stmt2 = $db->prepare("
INSERT INTO table2(
`id`, `order`, `caption`
) VALUES(
:id, :order, :caption
)
");
$count = 1;
foreach ($data as $foo => $value) {
$stmt1->bindValue(':order', $count, PDO::PARAM_INT);
$stmt1->bindValue(':parent_id', 0, PDO::PARAM_INT);
$stmt1->bindValue(':caption', !array_key_exists('caption', $value) || is_null($value['caption']) ? '' : $value['caption'], PDO::PARAM_STR);
$stmt1->bindValue(':caption2', !array_key_exists('caption2', $value) || is_null($value['caption2']) ? '' : $value['caption2'], PDO::PARAM_STR);
$stmt1->execute();
$parentId = $db->lastInsertId();
if (array_key_exists('bar', $value)) {
$tabCount = 1;
foreach ($value['bar'] as $bez) {
$stmt2->bindValue(':order', $tabCount, PDO::PARAM_INT);
$stmt2->bindValue(':id', $parentId, PDO::PARAM_INT);
$stmt2->bindValue(':caption', $bez, PDO::PARAM_STR);
$stmt2->execute();
$tabCount++;
}
}
if (array_key_exists('sub', $value)) {
$subcount = 1;
foreach ($value['sub'] as $sub => $subval) {
$stmt1->bindValue(':order', $subcount, PDO::PARAM_INT);
$stmt1->bindValue(':parent_id', $parentId, PDO::PARAM_INT);
$stmt1->bindValue(':caption', !array_key_exists('caption', $subval) || is_null($subval['caption']) ? '' : $subval['caption'], PDO::PARAM_STR);
$stmt1->bindValue(':caption2', !array_key_exists('caption2', $subval) || is_null($subval['caption2']) ? '' : $subval['caption2'], PDO::PARAM_STR);
$stmt1->execute();
$subParentId = $db->lastInsertId();
$subcount++;
if (array_key_exists('bar', $value)) {
$tabSubCount = 1;
foreach ($value['bar'] as $bezSub) {
$stmt2->bindValue(':order', $tabSubCount, PDO::PARAM_INT);
$stmt2->bindValue(':id', $subParentId, PDO::PARAM_INT);
$stmt2->bindValue(':caption', $bezSub, PDO::PARAM_STR);
$stmt2->execute();
$tabSubCount++;
}
}
}
}
$count++;
}
}
你做任何理由'$ tabellenCount = 1',但在循環內使用'$ tabCount'? –
不只是一個錯字,我替換了所有德語單詞,所以它更容易閱讀,但忘了這一個 – DarsVaeda
Ewww,使用NOT和||在三元內...... array_key_exists('caption',$ value)|| is_null($ value ['caption'])? '':$ value ['caption'] – VBAssassin