【发布时间】:2015-07-13 00:55:49
【问题描述】:
我有一个简单的 php 物业出租系统 CMS。现在我一直在向数据库添加新属性。
我的数据库:
properties: propertyId, imageId, town, num of rooms etc..
propertyid为主键自增,imageId为外键
images: imageId, image (image path with image name)
imageId 是主键自增:
因此,在我的 PHP 中,当向数据库添加新属性时,我有 2 个 SQL 语句(如果这不是好方法,请纠正我)。
首先插入图像值(“imagepath/imagename.jpg”)。
第二个查询插入属性值(城镇、numOfrooms 等)。
所以我已将图像插入数据库,然后我想将属性插入数据库,单击添加属性后我在那里检查错误,
我收到“图像已成功保存”到数据库的消息,但随后我收到错误消息:
无法添加或更新子行:外键约束失败:CONSTRAINT
properties_ibfk_4FOREIGN KEY (imageId) REFERENCESimages(imageId))
这是我先插入图片然后插入属性的正确方法吗?
【问题讨论】:
-
你需要做两件事......将图像插入到返回自我ID的数据库中。其次,您插入属性并设置您现在拥有的图像 ID。在事务中这样做是个好方法(如果你的数据库引擎有这个)
-
谢谢我还没有学习事务,刚刚在stackoverflow上发现了类似的问题,解决方案是使用php函数mysql_insert_id()这是你的意思吗?
-
是的,你是对的 .. 你在调用 mysql_insert_id() 之后插入 .. 它会返回新的 id 插入图像,然后你将这个 id 设置为第二个插入,它应该没问题......事务很好,如果在插入过程中发生故障,您始终拥有一致的数据
-
所以我刚刚尝试过,我得到了 php 错误:警告:mysqli_insert_id() 需要 1 个参数,0 在 C:\wamp\www\phpProject\admin\properties-add.php 中给出40 和 mysqli_error: 无法添加或更新子行: 外键约束失败 (
propertyrentalsystem.properties, CONSTRAINTproperties_ibfk_4FOREIGN KEY (imageId) REFERENCESimages(imageId)) -
这是我的完整 sql 语句: