Я почти уверен, что ошибка была выдана, прежде чем пытаться использовать стиль извлечения PDO::FETCH_ASSOC
. Из документации fetchAll
метод:
fetch_style
контролирует содержимое возвращаемого массива, как описано в PDOStatement::fetch()
. По умолчанию значение PDO::ATTR_DEFAULT_FETCH_MODE
(по умолчанию PDO::FETCH_BOTH
)
Использование его, как в вашем коде, не должно вызывать этой ошибки. Если это все еще происходит, это означает, что ошибка может быть выдана в другом месте. Вы можете попробовать это:
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$values = [];
while (!empty($results)) {
$firstPlayer = array_shift($results);
$secondPlayer = array_shift($results);
if ($firstPlayer !== null && $secondPlayer !== null) {
$values[] = '(' . $firstPlayer['id'] . ',' . $secondPlayer['id'] . ', :tournament_id)';
}
}
$values = implode(',', $values);
// Please note that you must not wrap the resulted `$values` by brackets
$stmt = $conn->prepare("insert into game(player1, player2, tournament_id) values $values");
Если ошибка все еще генерируется, попробуйте $firstPlayer->id
и $secondPlayer->id
, но причина возврата объектов вместо ассоциативных массивов будет очень странной, поскольку вы уже запросили стиль выборки из массива.