Ответы на вопросы по использованию SQL Server Driver для PHP

В этом посте вы можете найти ответы на несколько наиболее часто задаваемых вопросов от PHP разработчиков, использующих драйвер для SQL Server. Поскольку эти вопросы поступают достаточно часто, я решил сделать пост в блоге на который давать ссылку.

1. Как установить и настроить драйвер SQL Server для PHP?

Самый простой способ – воспользоваться Web Platform Installer. Подробно ручной процесс установки, а также использование драйвера описаны в статье на сайте MSDN.

2. Нам необходимо руководство по миграции базы данных MySQL на SQL Server, поскольку в MySQL многие вещи отличаются от SQL Server.

Подробное руководство по миграции с MySQL на SQL Server расположено по ссылке - Guide to Migrating from MySQL to SQL Server 2008 (англ.)

3. Есть ли возможность автоматизировать процесс миграции базы данных MySQL в SQL Server.

Для автоматизации процесса миграции доступен специальный инструмент - Microsoft Sql Server Migration Assistant for MySQL. На русском языке есть отличная статья по использованию этого инструмента.

4. В MySQL можно создать индекс на поля BLOB и TEXT, включив в него только первые несколько символов, как это сделать в SQL Server.

Ответ на этот и похожие вопросы есть в руководстве, упомянутом выше. Решение простое – создать вычисляемое полу (computed column), которое будет содержать нужное количество символов, и уже по этому полю построить индекс.

5. Драйвер не предоставляет аналога функции string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] ), что использовать?

Поскольку эта функция используется для защиты от SQL-инъекции, при использовании драйвера для SQL Server рекомендуется использовать параметризованные запросы вместо “экранирования” потенциально опасных символов.

Пример запроса:

$query = "SELECT * FROM Users WHERE Username = ? and Password = ?";

Выполнение запроса с параметрами:

$params = array($_POST['Username’], $_POST['Password’]);
$result = sqlsrv_query($con, $query, $params);

Подробно использование параметризованных запросов описано в блоге Брайана Свона.

6. Драйвер не предоставляет аналога функции int mysql_insert_id ([ resource $link_identifier ] ), что использовать?

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

sqlsrv_query($con, “SELECT SCOPE_IDENTITY() as LastRecID”)