gpt4 book ai didi

php - 执行 MySQL INSERT 时如何防止列对的值重复?

转载 作者:行者123 更新时间:2023-11-29 03:02:25 24 4
gpt4 key购买 nike

我的数据库中的一个表包含以下列:ID、campaign_id、opt_out_day插入一组“opt-out-days”(一组 DATETIME 值)的方法如下:

/**
* @param Integer $campaignId
* @param Array $optOutDays Array of DATETIME values
*/
public function addCampaignOptOutDays($campaignId, $optOutDays) {
$query = "INSERT INTO `".self::$tblOptOutDays."`
(campaign_id, opt_out_day)
VALUES
(:campaign_id, :opt_out_day)";

try {
$this->connection->beginTransaction();
$query = $this->connection->prepare($query);
$query->bindParam(':campaign_id', $campaignId, \PDO::PARAM_INT);
foreach ($optOutDays as $day) {
$query->bindParam(':opt_out_day', $day, \PDO::PARAM_STR);
$query->execute();
}
$this->connection->commit();
} catch (\PDOException $e) {
$this->connection->rollback();
throw new \Models\Database\DatabaseException($e->getMessage());
}
}

如何修改查询以防止为一个事件重复相同的选择退出日?换句话说,此表中可以存在具有相同退出日的多行,只要它们具有不同的“campaign-id”即可。不过,为 (campaign_id, opt_out_day) 添加唯一键不是一种选择,因为我不想在发生这种情况时抛出异常,我只想不再添加这对。

最佳答案

尝试使用 INSERT ... ON DUPLICATE KEY UPDATE id=id

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

这将避免额外的 SELECT 查询,但如果您有重复的键,也将避免错误。

还有 INSERT IGNORE ... 但这也可能会忽略其他错误

关于php - 执行 MySQL INSERT 时如何防止列对的值重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com