Подключение к sql серверу 2014 с php

Я пытаюсь подключить базу данных в sql server 2014 с помощью php следующим образом:

Сначала у меня есть этот скрипт в conexaosql.php:

class Conexao
{
    private static $connection;

    private function __construct(){}

    public static function getConnection() {

        $pdoConfig  = DB_DRIVER . ":". "Server = " . DB_HOST . ";";
        $pdoConfig .= "Database = ".DB_NAME.";";

        try {
            if (!isset($connection)){
                $connection =  new PDO($pdoConfig, DB_USER, DB_PASSWORD);
                $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }
            return $connection;
         } catch (PDOException $e) {
            $mensagem = "Drivers disponiveis: " . implode(",", PDO::getAvailableDrivers());
            $mensagem .= "\nErro: " . $e->getMessage();
            throw new Exception($mensagem);
         }
     }
}

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

define('DB_HOST'        , "xxxx");
define('DB_USER'        , "xxxx");
define('DB_PASSWORD'    , "xxxx");
define('DB_NAME'        , "xxxx");
define('DB_DRIVER'      , "sqlsrv");

require ("conexaosql.php");

try{

    $Conexao    = Conexao::getConnection();
    $query      = $Conexao->query("SELECT Pago FROM UTE02.dbo.Recibos");
    $produtos   = $query->fetchAll();

 }catch(Exception $e){

    echo $e->getMessage();
    exit;

 }

Я получаю следующую ошибку, когда запускаю код:

mysql, sqlite Ошибка: не удалось найти драйвер

Я использую php 8.1 и apache. Я оставляю ссылку с изображениями из phpinfo()

Вы на Linux...? Но «SQL Server» — это система баз данных Microsoft, верно?

Juan 18.11.2022 15:16

@Juan Да, я на Linux, а SQL-сервер на Windows Server 2012 R2.

Anónimo 18.11.2022 15:23

Итак, вам нужно установить что-то вроде «Драйвер Microsoft ODBC», верно...? Вы делали такую ​​установку...?

Juan 18.11.2022 15:30

@ Хуан Нет, но нужно ли мне делать это в Windows или Linux?

Anónimo 18.11.2022 15:34

Ваши страницы PHP находятся на сервере Linux...? Поэтому вы должны установить ODBC на Linux Server. Может быть, эта ссылка может вам помочь: Драйвер ODBC

Juan 18.11.2022 15:43

@Juan Я выполнил команды для Ubuntu, потому что мой сервер — сервер Ubuntu 20.04, но ошибка остается.

Anónimo 18.11.2022 15:54

У вас есть ссылка @Josh, которая может вам помочь. Может это не та команда или принцип установки.

Juan 18.11.2022 15:58

@Juan Я показываю различия phpinfo() в вопросе о том, как сейчас, в этой ссылке, но ошибка остается

Anónimo 18.11.2022 16:36

Это уже не чисто проблема PHP (тема, по которой я иногда могу помочь), а проблема установки ODBC на сервере Linux. Может быть, вам нужно создать новый вопрос...? Вы искали на StackOverFlow, есть ли какие-либо сообщения об этом...?

Juan 18.11.2022 16:58

@Juan Но что мне добавить в новый вопрос, чтобы решить проблему? не знаю как построить вопрос

Anónimo 18.11.2022 17:42

То, что я предлагаю вам, это всего лишь идея. Но вы можете создать новый вопрос «Установка драйвера ODBC для Microsoft SQL Server в Linux». А вы вставляете в этот вопрос команду которую запускали и ошибку с которой столкнулись

Juan 18.11.2022 17:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
11
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам необходимо установить драйвер PDO_SQLSRV для доступа к базе данных. У вас установлена ​​только поддержка MySQL и SQLite.

Если вы используете сервер Linux, вам необходимо установить и использовать ODBC.

Должна ли эта установка выполняться на стороне Linux? Есть ли какая-нибудь команда в Linux для установки этой dll?

Anónimo 18.11.2022 15:38

Ваша ссылка относится к странице, на которой рассказывается о файлах DLL ... Но @Anónimo находится под Linux.

Juan 18.11.2022 15:39

@ Anónimo На вашем PHP-сервере.

Josh 18.11.2022 15:40

Установить DLL на сервер Linux...????

Juan 18.11.2022 15:41

@Juan Действительно: но DLL дает ссылку на расширение, которое работает с Linux: расширение PDO_SQLSRV совместимо только с PHP, работающим в Windows. Для Linux см. ODBC и » Драйвер Microsoft SQL Server ODBC для Linux. Поэтому драйвер должен быть настроен, а правильную библиотеку для Linux вы можете найти здесь: php.net/manual/en/ref.pdo-odbc.php

Josh 18.11.2022 15:41

@Josh Можете ли вы сказать мне, какие команды выполняют эту установку?

Anónimo 18.11.2022 15:42

Да для ODBC. Поэтому я говорю об этом в комментариях :)

Juan 18.11.2022 15:44

Anonimo: Вы можете найти инструкции по установке на связанных страницах. @juan Извините, я не видел ваших комментариев :/

Josh 18.11.2022 15:47

@Josh Я уже выполнил то, что вы предложили, и я все еще выполнил то, что находится в этой ссылке, но у меня все еще есть ошибка

Anónimo 18.11.2022 16:15

@Josh Я показываю различия phpinfo() в вопросе о том, как сейчас, в этой ссылке, но ошибка остается

Anónimo 18.11.2022 16:36
Ответ принят как подходящий

Я решил свою проблему, выполнив следующие команды:

# Microsoft ODBC 17
sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

#Download appropriate package for the OS version - Ubuntu 18.04
curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17

# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH = "$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH = "$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install unixodbc-dev

# Microsoft ODBC 17
# 8.1
sudo apt-get -y install php-pear php8.1-dev
sudo update-alternatives --set php /usr/bin/php8.1
sudo update-alternatives --set phar /usr/bin/phar8.1
sudo update-alternatives --set phar.phar /usr/bin/phar.phar8.1
sudo update-alternatives --set phpize /usr/bin/phpize8.1
sudo update-alternatives --set php-config /usr/bin/php-config8.1

sudo pecl uninstall -r sqlsrv 
sudo pecl uninstall -r pdo_sqlsrv 
sudo pecl -d php_suffix=8.1 install sqlsrv
sudo pecl -d php_suffix=8.1 install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.1/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.1/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 8.1 sqlsrv pdo_sqlsrv
sudo service apache2 restart

Другие вопросы по теме

Похожие вопросы