На моем dev-сервере только последний запрос выполняется при отключении автоматической фиксации или при использовании транзакции - PullRequest
0 голосов
/ 09 октября 2019

У меня странная проблема с 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)

Есть идеи, что может происходить?

...