Исключение базы данных не удалось найти драйвер при подключении с PHP к базе данных MSSQL в системе Mac / Unix

#php #sql-server #unix #pdo

#php #sql-сервер #unix #pdo

Вопрос:

Прежде всего, я попытался выполнить поиск по множеству одинаковых вопросов, но многие из них устарели или не дали нужных мне результатов.

На моем локальном компьютере при запуске php -m я получаю

 PDO
pdo_dblib
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite
pgsql
 

Когда я запускаю
echo "<h1>PDO drivers</h1><pre>", print_r(PDO::getAvailableDrivers()), "</pre>"; в файле PHP я получаю

 PDO drivers
Array
(
    [0] => mysql
    [1] => sqlite
    [2] => pgsql
)
 

Я перепробовал много разных драйверов, но обнаружил, что лучше всего использовать dblib для систем, отличных от Windows.

Я открываю соединение со следующим кодом:

 use yiidbConnection;

$connection = new Connection([
            //-> THIS ONE WORKS FOR MYSQL
            //'dsn' => 'mysql:dbname=<testdb>;host=<testhost>;port=<port>', 

            //-> THIS ONE I'M TRYING TO GET WORKING
            'dsn' => 'dblib:host=<windows MSSQL Server via tcp>;dbname=<db>',
            'username' => '<user>',
            'password' => '<pass>'
        ]);

        $connection->open();
 

Что мне нужно сделать локально, чтобы запустить это на моем компьютере? Я использую MAMP Pro.

Я немного обеспокоен, потому что этот PHP-сервер работает в системе Unix, и мне нужно будет иметь возможность заставить его работать и там.

Комментарии:

1. Почему бы не использовать официальные драйверы ?

2. То, что вы получаете pdo_dblib в своем выводе CLI, но не в выводе страницы, предполагает, что на вашем сервере разные php.ini файлы для каждого, и последний просто не загружает нужный вам модуль. Вы можете использовать phpinfo() , чтобы определить, какой файл конфигурации загружается, и убедиться, что модуль включен там.

3. Учитывая, что это основано на Unix, php -m вероятно, нужно посмотреть, ./cli/php.ini где используется Apache ./apache2/php.ini (где . находится место установки для PHP, которое может варьироваться в зависимости от используемого вами дистрибутива).

4. @AlexHowansky модуль, похоже, отсутствует в phpinfo(). Как мне продолжить его установку?

5. Вы должны добавить extension = whatever в соответствующий INI-файл, а затем перезапустить процесс вашего веб-сервера.