Ответы на вопросы по использованию 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”)