Проблема:
Необходимо получить доступ и выполнить хранимую процедуру MSSQL из кода PHP.
Детали версии:
Машина локальной разработки - Windows 10 с XAMPP с PHP 7
Производственная система - Amazon AWS AMI Linux с PHP 5.3.2
Что мне нужно:
Хотите использовать соединение odbc для доступа к MSSQL на моем ЛОКАЛЬНОМ, а также РЕАЛЬНОМ сервере.
Что я пробовал для LIVE сервера:
Хотел убедиться, что LIVE-сервер совместим с пакетами, и что я могу правильно установить необходимые пакеты.
Следовательно, начали со следующих шагов:
1) Посмотрел ссылку ниже, где я обнаружил, что нам нужно использовать ODBC для более быстрого доступа к данным: https://stackoverflow.com/a/31105561
2) Пытался установить следующий драйвер ODBC на Amazon Linux, как указано ниже:
(Предполагается, что установщик RHEL 6 будет работать и в Amazon Linux. Пожалуйста, дайте мне знать, если я ошибаюсь)
sudo su curl packages.microsoft.com/config/rhel/6/prod.repo> /etc/yum.repos.d/mssql-release.repo
выход
sudo yum remove unixODBC # чтобы избежать конфликтов
sudo ACCEPT_EULA = Y yum install msodbcsql-13.0.1.0-1 mssql-tools
Но установщик не показывает ошибку ниже:
Error: msodbcsql conflicts with unixODBC-utf16-2.3.1-1.x86_64
Error: Package: msodbcsql-13.1.4.0-1.x86_64 (packages-microsoft-com-prod)
Requires: unixODBC >= 2.3.1
Available: unixODBC-2.2.14-14.7.amzn1.i686 (amzn-main)
unixODBC = 2.2.14-14.7.amzn1
3) Следовательно, попытался установить unixODBC, используя http://www.unixodbc.org/
- Downloaded the package via curl
- gunzip unixODBC*.tar.gz
- tar xvf unixODBC*.tar
Затем для его установки использовали следующие команды:
./configure
make
make install
4) Перезапустил службу httpd и снова попытался выполнить шаг 2, но установщик не смог выполнить ту же ошибку, что и в пункте 2.
Что я пробовал для ЛОКАЛЬНОЙ машины:
Uncaught PDOException: could not find driver
ОБНОВИТЬ: Решена проблема в локальной системе, добавив расширение dll в php.ini и перезапустив сервер.
Может ли кто-нибудь сообщить мне, что я пропустил в конфигурации LIVE?
Подход к решению
Поскольку прямая ссылка для установки не работала, были загружены файлы rpm для автономной установки, используя следующие строки:
sudo mkdir /tmp/RedHat6Packages
sudo curl https://packages.microsoft.com/rhel/6/prod/msodbcsql-13.1.4.0-1.x86_64.rpm > /tmp/RedHat6Packages/msodbcsql-13.1.4.0-1.x86_64.rpm
sudo curl https://packages.microsoft.com/rhel/6/prod/mssql-tools-14.0.4.0-1.x86_64.rpm > /tmp/RedHat6Packages/mssql-tools-14.0.4.0-1.x86_64.rpm
Пытался установить офлайн с помощью следующих команд: cd /tmp/RedHat6Packages/
sudo yum localinstall msodbcsql-13.1.4.0-1.x86_64.rpm
sudo yum localinstall mssql-tools-14.0.4.0-1.x86_64.rpm
Но все равно получалась та же ошибка: error: Failed dependencies:
libodbcinst.so.2()(64bit) is needed by msodbcsql-13.1.4.0-1.x86_64
unixODBC >= 2.3.1 is needed by msodbcsql-13.1.4.0-1.x86_64
Найдена команда для проверки пакетов: sudo yum provides /usr/lib64/libodbcinst.so.2
Это показало следующее предупреждение:
Loaded plugins: priorities, update-motd, upgrade-helper
2 packages excluded due to repository priority protections
unixODBC-2.2.14-14.7.amzn1.x86_64 : A complete ODBC driver manager for Linux
Repo : amzn-main
Matched from:
Filename : /usr/lib64/libodbcinst.so.2
unixODBC-utf16-2.3.1-1.x86_64 : ODBC driver manager with UTF16 character conversion enabled by default
Repo : packages-microsoft-com-prod
Matched from:
Filename : /usr/lib64/libodbcinst.so.2
Перейти прямо к решению
Проверил указанную ниже ссылку:
Что это означает: пакеты исключены из-за защиты приоритета репозитория
Отключены приоритеты путем редактирования /etc/yum/pluginconf.d/priorities.conf
и установить enabled = 0
Удалось установить драйвер с помощью упомянутых команд: cd /tmp/RedHat6Packages/
sudo yum localinstall msodbcsql-13.1.4.0-1.x86_64.rpm
sudo yum localinstall mssql-tools-14.0.4.0-1.x86_64.rpm
Все еще не могу понять, где находятся файлы расширений, но создал другой вопрос (Дальнейшие действия после установки MSSQL ODBC 13.1 в Amazon EC2 Linux) так как цель этого вопроса решена.
Как новичку в Linux (особенно, который перешел с Windows), было действительно сложно найти вышеуказанное решение. Надеюсь, это кому-то поможет !!
Вот команды, которые должны работать для Amazon Linux AMI:
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/msprod.repo1
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
sudo yum info unixODBC*
sudo yum install mssql-tools unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' | tee -a ~/.bash_profile && source ~/.bash_profile
Источник: Установите sqlcmd и bcp инструменты командной строки SQL Server в Linux.
В противном случае попробуйте установить старую версию, которая не противоречит этому Почта, например
sudo ACCEPT_EULA=Y yum install msodbcsql-13.0.1.0-1 mssql-tools-14.0.2.0-1