Старый пример не запускается: отделить отсутствующий модуль от отсутствующего класса

Отчёт показывает фактические наблюдения программы. Если создавалась учебная таблица, её удаление проверено отдельно.

Наблюдаемый результат программы
НаблюдениеРезультат
Расширение загруженода
Версия расширения8.0.30
MYSQLX_VERSION совпадает с phpversionда
Класс Driver доступеннет
Константа Driver::version определенанет
Класс FieldMetadata доступеннет
Класс ColumnResult доступенда
Четыре нужных getter доступныда
Открыто подключение к базенет
Строки и дополнительные наблюдения
{
    "extension_loaded": true,
    "extension_version": "8.0.30",
    "native_version": "8.0.30",
    "native_version_id": 80030,
    "classes": {
        "Driver": false,
        "FieldMetadata": false,
        "ColumnResult": true
    },
    "driver_version_constant_defined": false,
    "metadata_getters": {
        "getColumnLabel": true,
        "getColumnName": true,
        "getType": true,
        "getFractionalDigits": true
    },
    "database_connection_opened": false,
    "routes": [
        {
            "need": "версия загруженного модуля",
            "api": "phpversion(\"mysql_xdevapi\")"
        },
        {
            "need": "подпись столбца ответа",
            "api": "ColumnResult::getColumnLabel"
        },
        {
            "need": "тип и масштаб цены",
            "api": "ColumnResult::getType \/ getFractionalDigits"
        }
    ]
}

Полный JSON результата, включая реальные идентификаторы, сохранён рядом в result.json.