【问题标题】:php constraint violation Error 1452php约束违反错误1452
【发布时间】:2016-07-25 05:09:45
【问题描述】:

早上好, 当我尝试使用此 pdo 在我的数据库中插入事件时,我遇到了这个 sql 错误的大问题:


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 无法添加或更新子项 行:外键约束失败(datenbank.events, CONSTRAINT events_ibfk_1 外键 (event_cat) 参考 categories (cat_id) 在更新级联时删除级联)

-- 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的约束

ALTER TABLE `posts` ADD CONSTRAINT `posts_ibfk_1` FOREIGN KEY (`post_event`) REFERENCES `events` (`event_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `posts_ibfk_2` FOREIGN KEY (`post_by`) REFERENCES `users` (`id`) ON UPDATE CASCADE;

-- 表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;

请有人帮忙...

【问题讨论】:

  • 解决方案是在我的情况下从 pdo 多事务更改为 MySQL 多事务。

标签: php mysql sql pdo


【解决方案1】:

违反完整性约束:1452 无法添加或更新子行: 外键约束失败(datenbank.events, CONSTRAINTevents_ibfk_1FOREIGN KEY (event_cat) REFERENCEScategories(cat_id)

您正在对表 events 执行插入操作,其中一个值被放置在列 event_cat 中。

该值在cat_id 列中的表categories 中尚不存在。

你说必须的。所以数据库引擎说它不会这样做。它忠实地服从您的命令。

【讨论】:

  • Morning Drew,pdo 中的变量肯定已经存在于表类别中,这就是为什么我对三个外键进行子查询,或者我在那里做错了什么?...
  • 您的插入语句没有正确的值。您在 select 语句中所做的事情无关紧要。当插入出现时,这是唯一进行任何数据修改的事情。它可能是更新,也可能是插入。您选择了插入。如果你需要做一个 var_dump 那就去做吧。
  • 如果您需要查看一般查询日志(您的服务器从您那里收到的内容),您可以这样做here ...这是实际操作中的样子here跨度>
  • 好吧,你显然比我更了解错误 1452。
  • 如前所述,我正在使用 pdo 准备好的语句实现多事务,每次都遇到这个错误,然后我将全部更改为 MySQL 多事务,它解决了这个问题 :) Drew ...
猜你喜欢
  • 2016-08-11
  • 2015-11-27
  • 2016-05-25
  • 1970-01-01
  • 2021-07-23
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多