【问题标题】:simple PHP CMS with INSERT statement带有 INSERT 语句的简单 PHP CMS
【发布时间】: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_4 FOREIGN KEY (imageId) REFERENCES images (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, CONSTRAINT properties_ibfk_4 FOREIGN KEY (imageId) REFERENCES images (imageId))
  • 这是我的完整 sql 语句:

标签: php mysql


【解决方案1】:

如果您尝试将属性添加到刚刚添加图像的同一行,则需要使用 UPDATE 而不是 INSERT 过度简化的例子

UPDATE propertyName WHERE image = imageIJustInserted

一旦您插入/创建了一行,您实际上只能更新它。不能再次插入。

【讨论】:

  • 谢谢我看到你用更新语句去哪里了,不确定这是否会帮助我在我的属性表中我有字段 imageId(int) 我必须插入但我不知道如何如果 iam 正确,则获取刚刚插入的图像的图像 ID
  • 哦,好吧,我没看错,抱歉。敢机在cmets中是正确的
【解决方案2】:

所以我让它工作了 我不得不使用 $imageId = mysqli_insert_id($connection);
其中 connection 是我的实际数据库连接 我得到了刚刚插入的图像的 imageId,然后我可以在第二个插入语句中使用它 谢谢

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多