1
這裏的陣列我通過POST得到,運行插入在重複的更新與爲每個陣列
Array
(
[event_id] => 1
[fights] => Array
(
[0] => Array
(
[fight_id] => 1
[fighter_a_id] => 1
[fighter_b_id] => 2
[winner_id] =>
)
[1] => Array
(
[fight_id] => 2
[fighter_a_id] => 4
[fighter_b_id] => 3
[winner_id] => 3
)
)
)
這裏是我現在想要的PHP代碼,但它返回23000 PDO錯誤,我不明白。我讀到這是一個重複的輸入錯誤,但這不應該與ON DUPLICATE KEY UPDATE
發生。我認爲foreach
可能會導致錯誤?有什麼建議麼?
if (isset($_POST['fights'])){
$event_id = $_POST['event_id'];
foreach ($_POST['fights'] as $field){
if ($field['fight_id'] != '') $fight_id = $field['fight_id']; else $fight_id = '';
if ($field['fighter_a_id'] != '') $fighter_a_id = $field['fighter_a_id']; else $fighter_a_id = '';
if ($field['fighter_b_id'] != '') $fighter_b_id = $field['fighter_b_id']; else $fighter_b_id = '';
if ($field['winner_id'] != '') $winner_id = $field['winner_id']; else $winner_id = '';
$set_fights = $DBH->prepare('
INSERT INTO
fights (
fight_id,
fighter_a,
fighter_b,
winner,
event
)
VALUES (
:fight_id,
:fighter_a,
:fighter_b,
:winner,
:event
)
ON DUPLICATE KEY UPDATE
fighter_a = :fighter_a,
fighter_b = :fighter_b,
winner = :winner,
event = :event
');
$set_fights->bindParam(':fight_id', $fight_id, PDO::PARAM_INT);
$set_fights->bindParam(':fighter_a', $fighter_a, PDO::PARAM_INT);
$set_fights->bindParam(':fighter_b', $fighter_b, PDO::PARAM_INT);
$set_fights->bindParam(':winner', $winner, PDO::PARAM_INT);
$set_fights->bindParam(':event', $event_id, PDO::PARAM_INT);
$set_fights->execute();
}
}
try {
}
catch (PDOException $e) {
echo $e->getMessage();
}
你能告訴我們關於表的結構?哪些字段是關鍵字,哪些是唯一的? – 2012-07-11 01:03:56
@JohnC fight_id是獨一無二的。 Event,fighter_a,fighter_b和winner都是不同表格的外鍵。這四個字段在這些不同的表格中也是獨一無二的,但這不應該影響它。 – zen 2012-07-11 01:23:05