PHP PDO-MySQL查询创建或更新(唯一索引)
希望你身体健康 我在MySQL(MariaDB)数据库中有一个表,其模式如下:PHP PDO-MySQL查询创建或更新(唯一索引),php,mysql,pdo,Php,Mysql,Pdo,希望你身体健康 我在MySQL(MariaDB)数据库中有一个表,其模式如下: CREATE TABLE `scheduled_immobilise` ( `id` int(11) NOT NULL AUTO_INCREMENT, `account` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `device` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, `allow_
CREATE TABLE `scheduled_immobilise` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`device` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`allow_from` time DEFAULT NULL,
`allow_to` time DEFAULT NULL,
`active` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL,
`last_updated` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`cron_id_from` int(11) DEFAULT NULL,
`cron_id_to` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique` (`account`,`device`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我试图做的是编写一个查询,该查询将创建一行(如果唯一索引不存在),或者如果它已经存在,则更新它。我知道您可以通过先执行select查询来实现这一点,但最终我希望避免这种情况。下面是我用来创建的SQL查询。请注意,这是使用PDO命名占位符
INSERT INTO
scheduled_immobilise (
account,
device,
allow_from,
allow_to,
active
)
VALUES (
:account,
:device,
:allow_from,
:allow_to,
:active
)
非常感谢您的帮助,提前谢谢
Paul.这正是一个mysql选项
INSERT INTO
scheduled_immobilise (
account,
device,
allow_from,
allow_to,
active
)
VALUES (
:account,
:device,
:allow_from,
:allow_to,
:active
)
ON DUPLICATE KEY UPDATE account = :account, device = device...etc
略为正确的答案
INSERT INTO
scheduled_immobilise (
account,
device,
allow_from,
allow_to,
active
)
VALUES (
:account,
:device,
:allow_from,
:allow_to,
:active
)
ON DUPLICATE KEY UPDATE
account = values(account),
device = values(device)
...etc
它可以让你在任何模式下使用任何类型的占位符,并在PDO旁边使用任何驱动程序,而其他答案只有在PDO的仿真模式打开时才有效。“插入…在重复密钥更新时”有关更有效的信息,我认为这是类似的,但我在搜索时发现了混合结果。您知道是否有任何方法可以通过PDO判断它是否创建了新记录或更新了记录?仅供参考,不要期望在所有情况下都能够重用这样的命名参数。我的环境不允许这样做,并且状态
您不能在准备好的语句中两次使用相同名称的命名参数标记
@PatrickQ我确实读过一些关于这方面的内容,但是我已经做了很多次,它对我有效,尽管我不确定它的最佳实践是否。。。