Php 在我的开发服务器上,只有在关闭自动提交或使用事务时才运行最后一个查询
我对PHP和MySQL有一个奇怪的问题。我正在开发服务器上运行MariaDB 10.4.8 为了避免竞争条件或提高大量更新的性能,我在完成更新后通过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
$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这很奇怪……我很快就会尝试一下,看看会发生什么。