我有一个用户表和一个图片表。
图片表有一个上传者ID 列,它是一个外键。 它引用用户表中的用户ID 列。
出于某种原因,当我尝试将新记录插入图片表时,它无效。不会弹出任何错误消息。它只是不插入新记录。
INSERT INTO picture (pic_url, pic_uploader) VALUES($picurl, $uploader);
$ picurl 是文件上传的图像src路径。上传的文件位于正确的目录中,完全相同的代码完全适用于没有外键的早期记录。
$ uploader 包含外键值 - 来自包含用户帐户的用户ID 的会话变量 - 但它不会将其插入表中。
这是表格的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 ;
答案 0 :(得分:0)
用户表中不存在$ uploader值作为user_id的原因。
首先尝试使用sqlyog putty,mysqladmin等任何工具以简单的方式直接插入数据库。
INSERT INTO picture (pic_url, pic_uploader) VALUES('pic1', 'user1');
确保user1应存在于用户表中。如果它工作正常,那么你的应用程序中的问题其他明智的mysql将返回一个错误,我们将能够检查确切的问题,无论是由于外键还是其他。这样做并分享结果。
答案 1 :(得分:0)
在你的图片表中,你使用的是NOT NULL列。
但是你试图在insert命令中只插入两个值,这就是未插入数据的原因。
为所有列插入数据或将列设为NULLABLE。
由于