php - MySQL 无法插入带有外键的记录?

标签 php mysql sql database foreign-keys

我有一个用户表和一个图片表。

图片表有一个上传者ID列,它是一个外键。 它引用用户表中的用户ID列。

由于某种原因,当我尝试将新记录插入图片表时,它不起作用。没有弹出错误消息。它只是不插入新记录。

INSERT INTO picture (pic_url, pic_uploader) VALUES($picurl, $uploader);

$picurl 是文件上传的图像 src 路径。上传的文件位于正确的目录中,并且完全相同的代码对于没有外键的早期记录完美地工作。

$uploader 包含外键值——来自包含用户帐户的用户 ID 的 session 变量——但它不会将其插入表中。

这是表的 SQL,以防有帮助...

图片表格

CREATE TABLE IF NOT EXISTS picture (
  pic_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  pic_url varchar(200) NOT NULL,
  pic_uploader bigint(20) unsigned NOT NULL,
  PRIMARY KEY (pic_id),
  KEY pic_uploader (pic_uploader)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

图片限制

ALTER TABLE picture
  ADD CONSTRAINT pictures_ibfk_1 FOREIGN KEY (pic_uploader) REFERENCES user (user_id);

用户表

CREATE TABLE IF NOT EXISTS user (
  user_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  user_name varchar(80) NOT NULL,
  user_img varchar(200) NOT NULL DEFAULT 'img/defaultpic.png',
  user_email varchar(100) NOT NULL,
  user_pword char(60) NOT NULL,
  user_stat enum('0','1','A') NOT NULL,
  PRIMARY KEY (user_id),
  UNIQUE KEY user_email (user_email)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

最佳答案

$uploader 值在您的用户表中不作为 user_id 存在,这可能是有原因的。

首先尝试通过任何工具(如sqlyog putty、mysqladmin等)以简单的方式直接在数据库中插入。

INSERT INTO picture (pic_url, pic_uploader) VALUES('pic1', 'user1');

确保 user1 应存在于用户表中。如果它工作正常,那么您的应用程序中存在问题,否则 mysql 将返回错误,这样我们将能够检查确切的问题,无论是由于外键还是其他原因。所以就这样做并分享结果。

关于php - MySQL 无法插入带有外键的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23052368/

相关文章:

php - PDO 无法将行移动到不同的数据库

php - 隐藏文本框的发布值

mysql - 在 sql 结果中填充空日期的最直接方法是什么(在 mysql 或 perl 端)?

java - 当我将 SET NAMES 添加到我的插入语句时,将新插入的 id 作为空字符串获取

php - 从 mysql schemata 的版本控制开始,不要矫枉过正。好的解决方案?

mysql - 如何使用依赖注入(inject)在 golang 中正确设置 defer .close

php - 如果在调用 msql_insert_id() 之前发生另一个 autoIncrement ,它会给出错误的结果吗?

php - 在模型或 Controller 中处理错误?

sql - 连接逗号分隔的数据列

sql - 如何执行引用表变量的 SQL 字符串?