Php 无法添加或更新子行
上传照片后,我想将文件的名称和位置传递到名为Php 无法添加或更新子行,php,html,mysql,sql,Php,Html,Mysql,Sql,上传照片后,我想将文件的名称和位置传递到名为pics的表中(该表具有pic\u id主键属性、filename和filepath)。我还想存储上传到用户表中的picu id,因此pics表中的picu id基本上引用了用户表中的picu id。但是,我得到错误:无法添加或更新子行:外键约束失败(db.pics、constraint pics\u ibfk\u 1外键(pic\u id)在删除时引用用户(pic\u id)在更新时不操作不操作) PHP和SQL代码: $max = " SE
pics
的表中(该表具有pic\u id
主键属性、filename
和filepath
)。我还想存储上传到用户表中的picu id
,因此pics
表中的picu id
基本上引用了用户表中的picu id
。但是,我得到错误:无法添加或更新子行:外键约束失败(db.pics、constraint pics\u ibfk\u 1外键(pic\u id)在删除时引用用户(pic\u id)在更新时不操作不操作)
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));
}
表用户和PIC之间的关系
这是:
$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
最有可能的信息是: 从插入查询中删除
picu id
在此处向picu id
中插入一个空值将失败,并带有外键约束。空值(未指定字段时发生)将导致自动增量值或空插入,这取决于约束可能会起作用
当两个人同时执行插入时,使用当前代码也会失败:您没有使用事务来控制
select max(picu id)
和后续插入。同时执行2次将导致2个用户具有相同的picu id
错误消息说明了一切:除非父表中已经存在该值,否则无法将该值插入子表。尝试先插入配置文件图片,然后更新用户
(另外,屏幕截图和错误消息中的表名似乎与代码段中的表名不匹配。请小心。)如何插入上一个update语句中归属于用户的pic_id?如果先执行
$sql_insert
,mysql可以返回最后一个pic_insert_id
,这样就不需要max
查询了。例如使用$last\u id=mysql\u insert\u id()代码>获取一个自动递增的上次递增值。是的,我提取了一些与此代码无关的属性,以便更容易理解。也就是说,我想给pics中的pic_id赋予与用户中pic_id相同的值,你知道我怎么做吗?pic_id
是你在pic
中的主键。将该列设为自动增量列,让dbms为您生成值,然后使用选择最后一个插入ID()
检索该列,并将该值插入用户中。