Что вызывает это предупреждение PHP для функции mysqli_poll?

Я использую собственный драйвер MySQL для PHP, чтобы выполнять асинхронные параллельные запросы из приложения PHP к базе данных MySQL.

У меня есть функция, которая получает массив строк запросов и выполняет их параллельно.

По какой-то причине, хотя, в одной конкретной среде, где я использую эту функцию, следующее предупреждение PHP выводится на Apache error_log в массе:

PHP Warning:  mysqli_poll(): Parameter 1 not a mysqli object

Я предполагаю, что это происходит, когда одна или несколько переменных подключения к БД передаются в массив для первого аргумента mysqli_poll Функция не является допустимым объектом MySQLi, но, глядя на мой код, я не понимаю, как она могла бы достичь этой точки с самого начала.

В частности, вот код, о котором идет речь:

function makeAsyncQueries($queries) {

$allLinks = [];
$allLinkThreadIds = [];
$allResults = [];

foreach ($queries as $query) {

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
$result = mysqli_query($link, $query, MYSQLI_ASYNC);

if ($result !== false) {
$allLinks[] = $link;
$allLinkThreadIds[] = mysqli_thread_id($link);
} else {
// Attempting to log. This condition is never met.
}

}

$processed = 0;

while ($processed < count($allLinks)) {

$links = $errors = $reject = [];

foreach ($allLinks as $link) {
$links[] = $errors[] = $reject[] = $link;
}

if (mysqli_poll($links, $errors, $reject, 0, 0)) { // This causes the error.

foreach ($links as $link) {

if ($results = mysqli_reap_async_query($link)) {

$idx = array_search(mysqli_thread_id($link), $allLinkThreadIds);

if ($results !== false) {
$allResults[$idx] = processDbResults($results); // Custom function
} else {
// Attempting to log. This condition is never met.
}

freeResults($link); // Custom function
$processed++;

}

}

}

}

ksort($allResults);
return $allResults;

}

Если по какой-то причине результат mysqli_query неверно, то $result переменная должна быть false, право? Но остальная часть if ($result !== false) никогда не будет удовлетворен, поэтому можно ли предположить, что $result действует и что $link является допустимым объектом MySQLi?

Если это так, то как я могу получить предупреждение PHP от mysqli_poll вызов функции?

Любые указатели, которые помогут мне понять, где я что-то неправильно понимаю, будут чрезвычайно полезны.
Благодарю.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …