Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在我的开发服务器上,只有在关闭自动提交或使用事务时才运行最后一个查询_Php_Mysql_Transactions_Mariadb - Fatal编程技术网

Php 在我的开发服务器上,只有在关闭自动提交或使用事务时才运行最后一个查询

Php 在我的开发服务器上,只有在关闭自动提交或使用事务时才运行最后一个查询,php,mysql,transactions,mariadb,Php,Mysql,Transactions,Mariadb,我对PHP和MySQL有一个奇怪的问题。我正在开发服务器上运行MariaDB 10.4.8 为了避免竞争条件或提高大量更新的性能,我在完成更新后通过$db->AUTOCOMMIT(false)将更新排队,然后$db->commit()或$db->AUTOCOMMIT(true)。现在,这在我们的生产服务器上运行得很好,但是自从设置了新的开发服务器之后,似乎只执行循环中运行的最后一个查询 例如(请原谅没有准备好的陈述): $db->autocommit(FALSE); 而($interaction

我对PHP和MySQL有一个奇怪的问题。我正在开发服务器上运行MariaDB 10.4.8

为了避免竞争条件或提高大量更新的性能,我在完成更新后通过
$db->AUTOCOMMIT(false)
将更新排队,然后
$db->commit()
$db->AUTOCOMMIT(true)
。现在,这在我们的生产服务器上运行得很好,但是自从设置了新的开发服务器之后,似乎只执行循环中运行的最后一个查询

例如(请原谅没有准备好的陈述):

$db->autocommit(FALSE);
而($interactions=$recenteractions->fetch_数组(MYSQLI_ASSOC)){
$db->query(“更新$TELTABLENAME集合recentInteractions={$interactions[“interactionCount”]},其中itemID={$interactions[“itemID”]}”);
}
$db->autocommit(真);

$db->begin_transaction();
而($interactions=$recenteractions->fetch_数组(MYSQLI_ASSOC)){
$db->query(“更新$TELTABLENAME集合recentInteractions={$interactions[“interactionCount”]},其中itemID={$interactions[“itemID”]}”);
}
$db->commit();
在生产服务器上,这可以完美地运行所有查询。在dev框中,它似乎只运行最后一个。Prod和dev的软件版本/堆栈非常相似,尽管我在设置时无法进行1对1的匹配

PHP MySQL驱动程序和MariaDB版本: 产品:php71u-mysqlnd.x86_64(ius)

Dev:php-mysqlnd.x86_64(remi-php73)

产品:MariaDB-server.x86_64(10.2.24)

Dev:MariaDB-server.x86_64(10.4.8)


你知道会发生什么吗?

所以如果你在第一行中将autocommit设置为true,那么你的所有更新都会在dev上运行,如果你将其设置为false,那么只有最后一行会运行?在这些情况下,您是否验证了循环运行(例如,通过回声某物)?您是否有错误处理/捕获错误(可能会执行隐式回滚,但会继续循环或其他操作)?@Solarflare是的,这是正确的。我插入了error_log语句,以检查循环是否正在发生以及查询是否正确构建。循环上没有异常处理/错误检查,我只需要快速运行大量更新。共有3种情况。假..犯;假..真;开始……承诺。请创建一个表,其中3行和列分别标记为10.2和10.4。里面说6个细胞中的每一个是好是坏。我被这个问题和评论弄糊涂了。我刚刚用mariadb 10.4.8-1遇到了同样的问题。通过降级到10解决了这个问题。3@ManfredWuits这很奇怪……我很快就会尝试一下,看看会发生什么。