MySQL ON DUPLICATE KEY UPDATE双插入Xampp PHP7.0

时间:2017-11-18 02:29:52

标签: php mysql xampp mariadb php-7

问题:

insert on duplicate key update仅限PHP 仅限Xampp / Windows

的表格中插入两行

测试代码:

$connection = new \PDO('mysql:dbname=XXXXXXXXX;host=XXXXXXXX', 'XXXXXXXX', 'XXXXXXXX');
$query = 'insert into `test` (test) VALUES (1) on duplicate key update test=1';
$connection->exec($query);

Mysql架构:

CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`test` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

服务器:

XAMPP-win32-7.0.18-0-VCl 4

其他信息:

  • 在多个MySQL服务器上测试,来自同一个Web服务器
  • 在Linux服务器上进行测试时,也使用PHP7,问题已修复
  • 所以问题似乎是php mysql扩展
  • 我还在诊断,但希望这个问题可以通过文档来解决

编辑:

如下所述,这个问题似乎很容易被误解。我知道条件插入/更新一行需要一个密钥。这不是意图,也不是问题。鉴于未使用密钥的情况,IODKU语句应在每次运行时插入一行。运行1次后插入2行

2 个答案:

答案 0 :(得分:1)

也许您可以通过将代码更改为以下内容来测试某些内容:

$connection = new \PDO('mysql:dbname=XXXXXXXXX;host=XXXXXXXX', 'XXXXXXXX', 'XXXXXXXX');
$query = 'insert into `test` (test) VALUES (1) on duplicate key update test=1';
$connection->exec($query);

$query = 'insert into `test` (test) VALUES (2) on duplicate key update test=2';
$connection->exec($query);

现在结果可以是以下之一:

1。 1 2

2。 1 1 2 2

3. 1 2 1 2

在第一种情况下,一切都很好。

如果插入了第二种情况,那么系统中就存在错误。 PDO driverMySQL server,但我确信这是您安装中的一些奇怪故障。全新安装或其他机器很可能不会遇到此问题。

如果第三件事发生,那么你的PHP脚本会运行两次。这可能是PHP installation本身的问题,或者可能是由于某种原因实际上存在对脚本的第二次调用,无论是重定向还是其他设置。

无论如何,这不是我们可以解决的问题。你的代码工作正常。您可以在单独的计算机上尝试全新安装。由于我了解您对所有测试使用相同的PHP server和不同的mysql servers,我的赌注是新的PHP server可以解决此问题。

但是在另一台机器上全新安装它总是确保它实际上是一个bug的最佳方法。在这种情况下,您可以向系统管理员或所涉及的任何工具发布错误报告。

答案 1 :(得分:0)

要使用IODKU,您必须在要设置的列的一个(或组合)上有一个UNIQUE键。对于提供的查询,您需要在表定义中使用它:

UNIQUE(test)

另一方面,也许你真的不需要IODKU来做你想做的事情。意图是什么?