Как подключиться к Sql Server с Mac с помощью PHP PDO?
Если вы ищете Google для этого вопроса, вы найдете много неправильной, вводящей в заблуждение и устаревшей информации. Удивительно, но на Qaru нет твердого ответа, поэтому мы должны это изменить.
Я использую установку порта Mac Apache и PHP. Я установил php5-mssql, и я могу увидеть mssql на моей странице phpinfo().
Но я не вижу его в списке PDO.
PDO support enabled
PDO drivers dblib, mysql, odbc, pgsql
Является ли mssql не связанным с PDO? Есть ли другой драйвер, который можно использовать на Mac для подключения к базе данных SqlServer с использованием PDO? Похоже, это то, что должно быть возможно.
Ответы
Ответ 1
Помогает ли это вам?
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
Ответ 2
dblib - это драйвер, который необходимо использовать с mssql в системах unix.
Нет необходимости устанавливать что-либо еще,
<?php
$dsn = 'dblib:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
Должен работать
http://grover.open2space.com/content/use-php-and-pdo-connect-ms-sql-server - учебник
Ответ 3
После просмотра многих потоков я обнаружил, что лучший способ подключиться к 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.
Steps
1. Установить XCode
$ xcode-select ---install
2.- Установите Homebrew
3.- Установите autoconf с помощью Homebrew.
$ brew install autoconf
4.- Установить FreeTDS
$ brew install freetds
5. Загрузите версию PHP Source и распакуйте ее.
6.- Построить расширение PDO DBO (пример для 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 extensio в php.ini
расширение = pdo_dblib.so
8.- Перезапустите Apache
9.- Подключите с помощью dblib dsn:
$pdo = new PDO("dblib:host=$dbhost;dbname=$dbname","$dbuser","$dbpwd");
Ответ 4
Спасибо Esteban за хорошего гида (fooobar.com/questions/181043/...), который успешно помог мне установить драйвер pdo_dblib.
Однако у меня возникли проблемы с подключением к моей базе данных Azure SQL из OSX 10 с помощью PHP (5.5) и FreeTDS с использованием предоставленного dblib dsn. Наконец-то это исправлено для меня: добавить базу данных Azure (m53man42a) в мое имя пользователя.
My dblib PDO-соединение в PHP:
$conn = new PDO("dblib:host=azure-sql;dbname=my-database-name",
"[email protected]",
"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
Ответ 5
Обратите внимание, что Microsoft опубликовала для этого расширение PHP7, но если вы все еще на PHP5.x, это вам не поможет. Мне удалось подключиться с использованием другого стека: freetds, odbc, pdo.
Я использую OS X 10.11.6 (El Capitan) с Macports, PHP5.6.
Я начал с создания базы данных Azure SQL под названием mydb
на сервере с именем myserver.database.windows.net
. Важно помнить о том, чтобы открыть брандмауэр на ваш IP-адрес клиента, который вы делаете на сервере.
Первый шаг - установить freetds с драйвером ODBC и его коннектором PHP (смените php56 на правильную версию вашего PHP):
sudo port install freetds +odbc
sudo port install php56-odbc
Затем вам нужно включить некоторые строки в файлы конфигурации:
/opt/local/etc/odbcinst.ini
[FreeTDS]
Description = ODBC for FreeTDS
Driver = /opt/local/lib/libtdsodbc.so
Setup = /opt/local/lib/libtdsodbc.so
FileUsage = 1
Это говорит библиотеке odbc, где можно найти драйвер odbc.
/opt/local/etc/freetds/freetds.conf
[myserver]
host = myserver.database.windows.net
port = 1433
tds version = 7.0
Это сообщает библиотеке freetdc, где можно найти ваш сервер.
/opt/local/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 и который указал мне в правильном направлении для всего этого.