Как я могу подключиться к Sql Server с Mac с помощью PHP PDO?


Если вы поищете в Google этот вопрос, вы найдете много неверной, вводящей в заблуждение и устаревшей информации. Удивительно, но однозначного ответа на вопрос о переполнении стека нет, поэтому мы должны это изменить.

Я использую установку на Mac-порт Apache и PHP. Я установил php5-mssql, и я могу видеть mssql на своей странице phpinfo().

Но я не вижу его в списке PDO.

PDO support enabled
PDO drivers     dblib, mysql, odbc, pgsql 

mssql не связан с PDO? Есть ли другой драйвер, который можно использовать на Mac для подключения к базе данных SQLServer с помощью PDO? Похоже, это то, что должно быть возможно.

Author: Eric Z Beard, 2012-11-14

5 answers

Помогает ли вам это?

Http://blog.nguyenvq.com/2010/05/16/freetds-unixodbc-rodbc-r/

Я использую FreeTDS для подключения к серверам Microsoft SQL с сервера Linux, и похоже, что человек по ссылке выше использовал FreeTDS для подключения с Mac.

Вот мой файл /etc/freetds/freetds.conf (единственная часть, которую я добавил, была в самом конце для сервера XYZ):

[global]
        # TDS protocol version
;       tds version = 4.2

        # Whether to write a TDSDUMP file for diagnostic purposes
        # (setting this to /tmp is insecure on a multi-user system)
;       dump file = /tmp/freetds.log
;       debug flags = 0xffff

        # Command and connection timeouts
;       timeout = 10
;       connect timeout = 10

        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.  
        # Try setting 'text size' to a more reasonable limit 
        text size = 64512

# Define a connection to the MSSQL server.
[xyz]
        host = xyz
        port = 1433
        tds version = 8.0

[Правка спрашивающего]

Конфигурация FreeTDS - это первая половина ответ. Как только он будет настроен, вы сможете запустить что-то подобное из командной строки и подключиться:

tsql -S xyz -U username -P password

Тогда вам нужно использовать dblib, а не mssql, в качестве драйвера PDO:

$pdo = new PDO("dblib:host=$dbhost;dbname=$dbname",
                "$dbuser","$dbpwd");

Где $dbhost - это имя из файла freetds.conf

 16
Author: Benny Hill, 2012-11-27 22:42:23

Просмотрев множество потоков, я обнаружил, что лучший способ подключиться к MSSQL с Mac OS X с PHP 7 или старше - использовать dblib. (Просто скачайте правильную версию php)

Вы можете следовать этим инструкциям (игнорируя mssql.so расширение) для очень простого подключения:

Https://github.com/BellevueCollege/public-docs/blob/master/PHP/configure-mssql-pdodblib-mac.md

Он отлично работал с OS X El Capitan, Bitnami с PHP 7.

Шаги 1.- Установить XCode

$ xcode-select ---install

2. - Установите Homebrew

3. - Установите autoconf с помощью Homebrew.

$ brew install autoconf

4.- Установить FreeTDS

$ brew install freetds

5. - Загрузите свою версию исходного кода PHP и распакуйте его.

6. - Создайте расширение PDO DBLIB (пример для PHP 5.5.14)

$ cd php-5.5.14/ext/pdo_dblib
$ phpize
$ ./configure --with-php-config=/usr/bin/php-config --with-pdo-dblib=/usr/local/
$ make
$ sudo cp modules/pdo_dblib.so /usr/lib/php/extensions/no-debug-non-zts-20121212

7.- Добавьте расширение .so в php.ini extension=pdo_dblib.so

8. - Перезапустить Apache

9. - Подключение с помощью dsn dblib:

$pdo = new PDO("dblib:host=$dbhost;dbname=$dbname","$dbuser","$dbpwd");
 5
Author: Esteban Eid Jordán, 2016-06-09 19:20:50

Dblib - это драйвер, который необходимо использовать с mssql в системах unix

Вам не нужно устанавливать что-либо еще,

<?php
    $dsn = 'dblib:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    $dbh = new PDO($dsn, $user, $password);
 5
Author: E_p, 2018-10-03 18:20:24

Спасибо Эстебану за хорошее руководство (https://stackoverflow.com/a/37707426 ), который успешно помог мне установить драйвер pdo_dblib.

Однако у меня возникли проблемы с подключением к моей базе данных SQL Azure из OSX 10 с помощью PHP (5.5) и FreeTDS с использованием предоставленного dsn dblib. Что окончательно исправило это для меня, так это добавление базы данных Azure (m53man42a) к моему имени пользователя.

Мое PDO-соединение dblib в PHP:

$conn = new PDO("dblib:host=azure-sql;dbname=my-database-name", 
"username@m53man42a",
"my-secret-password");

Мой FreeTDS.conf:

[azure-sql]
host = m53man42a.database.windows.net
port = 1433
tds version = 8.0
client charset = UTF-8
text size = 20971520

Подумайте о том, чтобы добавить это в качестве маркера под номером 10 в свой список... :D

 1
Author: holm50, 2017-05-23 12:26:23

Обратите внимание, что Microsoft опубликовала для этого расширение PHP7, но если вы все еще используете PHP5.x, это вам не поможет. Мне удалось подключиться, используя другой стек: freetds, odbc, pdo.

Я использую OS X 10.11.6 (El Capitan) с Macports, PHP5.6.

Я начал с создания базы данных SQL Azure с именем mydb на сервере с именем myserver.database.windows.net. Важно не забывать открывать брандмауэр на IP-адрес вашего клиента, что вы делаете на сервер.

Первым шагом является установка freetds с драйвером ODBC и его PHP-коннектором (измените php56 на правильную версию вашего PHP):

sudo port install freetds +odbc
sudo port install php56-odbc

Далее вам нужно включить несколько строк в файлы конфигурации:

/opt/локальный/etc/odbcinst.ini

[FreeTDS]
    Description = ODBC for FreeTDS
    Driver      = /opt/local/lib/libtdsodbc.so
    Setup       = /opt/local/lib/libtdsodbc.so
    FileUsage   = 1

Это указывает библиотеке odbc, где найти ее драйвер odbc.

/выбор/локальный/etc/freetds/freetds.conf

[myserver]
    host = myserver.database.windows.net
    port = 1433
    tds version = 7.0

Это указывает библиотеке freetdc, где найти ваш сервер.

/opt/локальный/etc/odbc.ini

[myds]
Description = Test for SQL Server on Azure
Driver = FreeTDS
Trace = Yes
TraceFile = /var/log/sql.log
Database = mydb
Servername = myserver
UserName = myusername
Password = mypassword
Port = 1433
Protocol = 7.0
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No

Это создает источник данных с именем myds, указывающий на вашу базу данных, что позволяет вам подключиться к следующему PHP:

$conn = new PDO('odbc:myds', 'myusername', 'mypassword');

Если что-либо из этого не работает для вас, сначала проверьте правильность установки freetds, используя:

tsql -S myserver -U myusername -P mypassword

А затем проверьте, что спецификации ODBC в порядке, используя:

isql -v myds myusername mypassword

Благодаря https://github.com/lionheart/django-pyodbc/wiki/Mac-setup-to-connect-to-a-MS-SQL-Server , который выполняет аналогичную работу для Python и который указал мне правильное направление для всего этого.

 0
Author: xgretsch, 2017-09-29 15:17:51