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()
检索该列,并将该值插入
用户中。