【发布时间】:2020-07-15 18:19:14
【问题描述】:
我正在尝试在PHP 和MySQL 中使用INSERT ON DUPLICATE KEY UPDATE 查询。
我有一个用户个人资料,用户可以在其中将图像更新到他们的个人资料(然后将其保存到数据库中)。我的问题是,如果在profileImage 表中他们已经有一个条目(并且可以使用studentID 识别用户,那么只需更改文件路径(其中包含图像的名称),并且不要在 db 表中插入另一行。
但是,我的查询仍然允许用户上传超过 1 张图片时遇到问题。
php 脚本:
$stmt = $conn->prepare ("INSERT INTO `profileImage` (`imageID`, `imagePath`, `studentID`) VALUES (NULL, ?, ?) ON DUPLICATE KEY UPDATE `imageID` = VALUES (`imageID`), `imagePath` = VALUES (`imagePath`), `studentID` = VALUES (`studentID`) ");
$stmt->bind_param("si", $fileName, $studentID);
$stmt->execute() or die("Failed to insert image into the database");
db中的profileImage表:
imageID 是主键,studentID 是外键,反正我可以在我的语句中将studentID 设置为触发器,所以如果studentID 已经存在于此表中,那么运行更新而不是插入?
【问题讨论】:
-
那么 imageID 不是唯一的吗?如果没有,并且您只希望每个学生 1 张图片,那么您需要一个唯一的 studentid 键。
-
@P.Salmon imageID 是主键,因此对于表中的每一行都是唯一的。
-
你真的有 3 个参数(id 必须设置),并且在更新子句中你不应该再设置 id
-
@splash58 我明白了,那么在 INSERT 查询中应该只是
NULL吗?由于主键 imageID 设置为自动增量。 -
@P.Salmon 使用插入查询,我必须设置为 NULL 否?因为我不知道将分配什么 id,因为该列只是设置为自动递增。我应该将其设置为其他内容吗?
标签: php mysql prepared-statement on-duplicate-key