2016-07-25 204 views
-2

早上好, 我有難同當I,M試圖在我的數據庫與這個PDO插入事件此SQL錯誤的一個大問題: PHP的約束衝突錯誤1452


SQL:

$subsquery1 = "SELECT cat_id FROM categories WHERE cat_name = ".$event_cat; 

$subsquery2 = "SELECT tournament_id FROM tournaments WHERE tournament_name = ".$event_tournament; 

$sqlx = "INSERT INTO events(event_team1, event_team2, event_cat, event_tournament, event_start_at, event_end_to, event_by) VALUES(:event_team1, :event_team2, :event_cat, :event_tournament, :event_start_at, :event_end_to, :event_by)"; 

// Prepare statement 
$statementx = $pdo->prepare($sqlx); 

// execute the query 
$resultx = $statementx->execute(array(':event_team1' => $event_team1, ':event_team2' => $event_team2, ':event_cat'=> $subsquery1, ':event_tournament'=> $subsquery2, ':event_start_at' => $event_start_at, ':event_end_to' => $event_end_to,':event_by'=>$event_by)); 


SQL錯誤,請:

完整性約束違規:1452不能添加或更新一個孩子 行:外鍵約束失敗(datenbankevents,約束 events_ibfk_1外鍵(event_cat)參考文獻categoriescat_id)ON DELETE CASCADE ON UPDATE CASCADE)

-- Table structure for table `events` 
CREATE TABLE `events` (
    `event_id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `event_team1` varchar(255) NOT NULL, 
    `event_team2` varchar(255) NOT NULL, 
    `event_start_at` timestamp NOT NULL, 
    `event_end_to` timestamp NOT NULL, 
    `event_cat` int(8) NOT NULL, 
    `event_by` int(8) NOT NULL, 
    `event_tournament` int(8) NOT NULL, 
    KEY `event_cat` (`event_cat`), 
    KEY `event_by` (`event_by`), 
    KEY `event_tournament` (`event_tournament`) 
)ENGINE=InnoDB DEFAULT CHARSET=latin1; 

- 對錶的約束posts

​​

- 約束的表events

ALTER TABLE `events` ADD CONSTRAINT `events_ibfk_1` FOREIGN KEY (`event_cat`) REFERENCES `categories` (`cat_id`) ON DELETE CASCADE ON UPDATE CASCADE, 
ADD CONSTRAINT `events_ibfk_2` FOREIGN KEY (`event_by`) REFERENCES `users` (`id`) ON UPDATE CASCADE, 
    ADD CONSTRAINT `events_ibfk_3` FOREIGN KEY (`event_tournament`) REFERENCES `tournaments` (`tournament_id`) ON DELETE CASCADE ON UPDATE CASCADE; 

請有人能有助於...

+0

解決方案是在我的情況下,從pdo多事務更改爲MySQL多事務。 –

回答

1

完整性約束違規:1452不能添加或更新子行: 一個外鍵約束失敗(datenbank.events, CONSTRAINTevents_ibfk_1FOREIGN KEY(event_cat) REFERENCEScategories( cat_id)

您正在對錶events執行插入操作,並將值放在列event_cat中。

該值尚不表categoriescat_id存在。

而你說過它必須。所以數據庫引擎說它不會這樣做。它忠實地遵守你的命令。

+0

上午德魯,在PDO肯定已經存在於表類別的變量,這就是爲什麼我做了subsquery三個外鍵,或I,M在做有些事情錯在那裏?... –

+0

INSERT語句中不具備正確的價值。你在選擇陳述中所做的是無關緊要的。當插入到來時,這是唯一正在進行數據修改的東西。它可能是一個更新或它可能是一個插入。您選擇了插入。如果你需要做一個var_dump然後這樣做。 – Drew

+0

如果您需要查看一般查詢日誌(您的服務器從您那裏得到的),可以在[這裏](http://dev.mysql.com/doc/refman/5.7/en/query-log。 HTML)...這裏是什麼樣子的行動[這裏](http://stackoverflow.com/a/38394479) – Drew