У меня странная проблема с PHP и MySQL. Я запускаю MariaDB 10.4.8 на моем сервере разработки.
Чтобы избежать условий гонки или повысить производительность большого количества обновлений, я ставлю обновления в очередь на $db->AUTOCOMMIT(false)
, а затем $db->commit()
или $db->AUTOCOMMIT(true)
как только я закончу. Теперь, это работает отлично на нашем производственном сервере, но с момента установки нового сервера разработки, кажется, что только последний запрос, выполненный в цикле во время этого, выполняется.
Например (простите за отсутствиеподготовленный оператор):
$db->autocommit(FALSE);
while ($interactions = $recentInteractions->fetch_array(MYSQLI_ASSOC)) {
$db->query("UPDATE $tempTableName SET recentInteractions = {$interactions["interactionCount"]} WHERE itemID = {$interactions["itemID"]}");
}
$db->autocommit(TRUE);
или
$db->begin_transaction();
while ($interactions = $recentInteractions->fetch_array(MYSQLI_ASSOC)) {
$db->query("UPDATE $tempTableName SET recentInteractions = {$interactions["interactionCount"]} WHERE itemID = {$interactions["itemID"]}");
}
$db->commit();
На рабочем сервере все запросы выполняются идеально. На устройстве dev, кажется, запускается только последний. Prod и dev имеют довольно похожие версии программного обеспечения / стека, хотя мне не удалось сопоставить 1-к-1 при настройке.
Драйверы PHP-MySQL и версии MariaDB:
Prod: 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)
Есть идеи, что может происходить?