运行 使用 php 和 mysql 在重复密钥更新时插入

Run an INSERT ON DUPLICATE KEY UPDATE using php and mysql

我正在尝试在 PHPMySQL 中使用 INSERT ON DUPLICATE KEY UPDATE 查询。

我有一个用户个人资料,用户可以在其中更新图像到他们的个人资料(然后将图像保存到数据库中)。我的问题是,如果在 profileImage table 里面他们已经有一个条目(并且用户可以用 studentID 来识别,那么只有 运行 和 UPDATE 在图像上仅更改文件路径(其中包含图像的名称)并且不要将另一行插入数据库 table.

但是我遇到了查询问题,仍然允许用户上传超过 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");

profileImage table 在数据库中:

imageID 是主键而 studentID 是外键,无论如何我可以在我的语句中设置 studentID 作为触发器,所以如果 studentID 已经存在于此 table, THEN 运行 更新而不是插入?

1)

您似乎需要确保 studentID 列的值是唯一的。为此,两件事是最好的;将其设置为唯一并允许 NULL 值(这可能不是必需的,但这取决于您使用数据的方式)。

所以,from this SO Question你可以这样做:

ALTER TABLE `profileImage` ADD UNIQUE (`studentID`)

在你的 SQL 中。

2a)

完成后,您需要通过 P.Salmon 调整原始 SQL 重复检查,,您永远不需要设置或更新主键列.

 INSERT INTO `profileImage` (`imagePath`, `studentID`) VALUES ( ?, ?) 
 ON DUPLICATE KEY UPDATE `imagePath` = VALUES (`imagePath`), `studentID` = VALUES (`studentID`)

2b)

除此之外,如果 studentID 列已经存在并且(假设是)重复的原因,您也不需要设置它;所以:

 INSERT INTO `profileImage` ( `imagePath`, `studentID`) 
 VALUES ( ?, ?) ON DUPLICATE KEY UPDATE `imagePath` = VALUES (`imagePath`)