运行 使用 php 和 mysql 在重复密钥更新时插入
Run an INSERT ON DUPLICATE KEY UPDATE using php and mysql
我正在尝试在 PHP
和 MySQL
中使用 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`)
我正在尝试在 PHP
和 MySQL
中使用 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`)