上传照片后,我想将文件的名称和位置传递给名为pics
的表格(pic_id
具有filename
主键属性filepath
和{{ 1}})。我还想将上传的pic_id
存储到users表中,因此pic_id
表中的pics
基本上引用了users表中的pic_id
。但是我得到Error: Cannot add or update a child row: a foreign key constraint fails (db . pics, CONSTRAINT pics_ibfk_1 FOREIGN KEY (pic_id) REFERENCES users (pic_id) ON DELETE NO ACTION ON UPDATE NO ACTION)
。
PHP& SQL代码:
$max = "
SELECT pic_id
FROM profile_pics
WHERE pic_id = (
SELECT MAX(pic_id)
FROM profile_pics
)
";
$sql_update = "
UPDATE users
SET pic_id = '$max'
WHERE username = '$username'
";
$sql_insert = "
INSERT INTO profile_pics (pic_id, filename, filepath)
VALUES ('' ,'$fileName', '$resized_file')
";
$results_insert = $conn->query($sql_insert);
if (!$results_insert) {
exit ("Error: " . mysqli_error($conn));
}
表用户与图片之间的关系 1
答案 0 :(得分:0)
此:
$max = "SELECT pic_id FROM profile_pics WHERE pic_id = (SELECT MAX(pic_id) FROM profile_pics)";
实际上并没有在变量$max
中提供结果。您必须执行查询并读取结果。
你也可以使用
SELECT MAX(pic_id) AS pic_id FROM profile_pics
答案 1 :(得分:0)
最有可能提供此信息:
从插入查询中删除
pic_id
。
在此处将空值插入pic_id
将失败,并带有外键约束。 NULL(在未指定字段时发生)将导致auto_increment值或NULL插入,这取决于约束可能有效。
当2个人同时执行插入时,使用当前代码也将失败:您没有使用事务来控制select max(pic_id)
和后续插入。同时执行2次将导致2位用户具有相同的pic_id
答案 2 :(得分:0)
错误消息说明了一切:您不能在子表中插入值,除非父值中已存在该值。首先尝试插入profile_pics,然后更新用户。
(另外,屏幕截图中的表格名称和错误消息似乎与您的代码段中的表格名称不相符。请注意这一点。)