我有一个用户表和一个图片表。
图片表有一个上传者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/