Intereting Posts
Как найти URL-адрес реферера при использовании перенаправления htaccess 404? PHP-количество вхождений символов строки в другой строке Что это за синтаксис PHP? Mysql извлекает многоугольные данные У PHP проблемы с сохранением больших файлов Удалите все элементы массива с помощью нечисловых клавиш Работа с длинными серверными операциями с использованием ajax? Каков самый быстрый способ преобразования таблицы html в php-массив? PHP: вложенное меню с рекурсивной функцией, расширяющее только некоторые узлы (не все дерево) Изменение переменных сеанса PHP с помощью файла include Как удалить некоторую строку из текстового файла с помощью PHP? Как вставить данные с IGNORE, если одна переменная всегда различна? StrRev () Дозированная поддержка UTF-8 Обновление PHP-версии вызвало проблемы с конструкторами классов почему мой сценарий не получает значения, которые я цели

PHP 5.4 на Linux: как подключиться к MS SQL Server 2008?

У меня есть Linux-сервер Debian 6 с установленными Apache 2.2 и PHP 5.4. Мне нужно подключить мое приложение с MS SQL Server 2008.

Мое приложение использует Zend Framework 1.11 и charset UTF-8 (у меня будут пользователи со всех уголков мира, и они будут размещать данные на своем родном языке).

FRIST, я попытался использовать ODBC-драйвер Microsoft SQL Server для Linux. Он говорит только для Red Hat, но я следую этим инструкциям для установки:

http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/

Я мог бы подключиться и сделать некоторые выборки на нем, но я не мог вставлять в него данные. У меня возникла проблема с привязкой параметров к операторам pdo.

Вставить данные, подобные приведенным ниже, не помогло:

$stmt = $conn->prepare("insert into mar_regions (name) values (:name)"); $resp = $stmt->execute(array(':name' => $param)); 

Но если бы я использовал, как это, он работает:

 $stmt = $conn->prepare("insert into mar_regions (name) values ('".$param."')"); $resp = $stmt->execute(); 

Поэтому я отказался от этого драйвера, потому что мое приложение ZF 1.11 не будет работать, если это произойдет.

SECOND, я пытаюсь использовать драйвер PDO для FreeTDS. Это работает нормально, и я могу использовать его в своем приложении ZF 1.11.

Но потом у меня появилась еще одна проблема: кодировки. Я настраиваю мой freeTDS.conf для использования UTF-8, меняю свои таблицы на использование NVARCHAR в VARCHAR и могу вставлять данные utf-8 следующим образом:

 $stmt = $dbh->prepare("insert into mar_teste (name) values (N'ンから初・配信 € зеленый банан ÀÀÀÀáááááá')"); $resp = $stmt->execute(); 

Но, на моем ZF 1.11, я не могу передать этот атрибут «N» в запросах! Так что мое приложение все еще не работает.

Как видите, я все пробовал.

Поэтому мой вопрос : как подключиться к Linux, используя ZF 1.11 charset UTF-8, на MS SQL Server 2008?

Ответ на мой вопрос: Используйте freeTDS! Theres параметр для charset на нем:

 [MyDSN] host = <<ip>> port = <<port>> # use 8.0 for newer versions of SQLSERVER tds version = 8.0 # text size don't need to be such a high value, its just an example text size = 4294967295 client charset = UTF-8 

В Zend Framework настройте свое соединение следующим образом:

 ;; BANCO DE DADOS LINUX database.adapter = PDO_MSSQL database.params.pdoType = dblib database.params.host = MyDSN database.params.dbname = <<dbname>> database.params.username = <<username>> database.params.password = <<passwd>> database.params.driver_options.charset = UTF-8 database.isDefaultTableAdapter = true 

Это решает проблему! 😉