Поделиться через


Практическое руководство. Указание типов данных SQL Server с использованием драйвера SQLSRV

Скачать драйвер PHP

Эта статья показывает, как использовать драйвер SQLSRV, чтобы указать тип данных SQL Server для данных, отправляемых на сервер. Сведения, содержащиеся в этой статье, не распространяются на использование драйвера PDO_SQLSRV.

Чтобы указать тип данных SQL Server, необходимо использовать дополнительный массив $params при подготовке и выполнении запроса, который вставляет или обновляет данные. Дополнительные сведения о структуре и синтаксисе массива $params см. в статье sqlsrv_query или sqlsrv_prepare.

Ниже представлена обобщенная процедура указания типа данных SQL Server при отправке данных на сервер:

Примечание.

Если тип данных SQL Server не указан, используются типы по умолчанию. Дополнительные сведения о типах данных SQL Server по умолчанию см. в статье Default SQL Server Data Types.

  1. Определите запрос Transact-SQL, который вставляет или обновляет данные. Используйте вопросительные знаки (?) в качестве заполнителей для значений параметров в запросе.

  2. Инициализируйте или обновите переменные PHP, которые соответствуют заполнителям в запросе Transact-SQL.

  3. Создайте массив $params , используемый при подготовке или выполнении запроса. Обратите внимание, что при указании типа данных SQL Server каждый элемент массива $params также должен быть массивом.

  4. Укажите требуемый тип данных SQL Server, используя соответствующую константу SQLSRV_SQLTYPE_* в качестве четвертого параметра в каждом подмассиве массива $params. Полный список констант SQLSRV_SQLTYPE_* см. в разделе SQLTYPEs статьи Константы (драйверы Microsoft SQL Server для PHP). Например, в следующем коде $changeDate, $rateи $payFrequency соответственно указаны как типы SQL Server datetime, moneyи tinyint в массиве $params . Так как для параметра $employeeId тип SQL Server не указан и параметр инициализируется целым числом, используется тип SQL Server по умолчанию integer .

    $employeeId = 5;  
    $changeDate = "2005-06-07";  
    $rate = 30;  
    $payFrequency = 2;  
    $params = array(  
                array($employeeId, null),  
                array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
                array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
                array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  
              );  
    

Пример

В следующем примере данные вставляются в таблицу HumanResources.EmployeePayHistory базы данных AdventureWorks. Типы SQL Server указаны для параметров $changeDate, $rateи $payFrequency . Тип SQL Server по умолчанию используется для параметра $employeeId . Чтобы убедиться, что данные были успешно вставлены, выполняется извлечение и отображение тех же данных.

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

<?php  
/* Connect to the local server using Windows Authentication and   
specify the AdventureWorks database as the database in use. */  
$serverName = "(local)";  
$connectionInfo = array( "Database"=>"AdventureWorks");  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if( $conn === false )  
{  
     echo "Could not connect.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Define the query. */  
$tsql1 = "INSERT INTO HumanResources.EmployeePayHistory (EmployeeID,  
                                                        RateChangeDate,  
                                                        Rate,  
                                                        PayFrequency)  
           VALUES (?, ?, ?, ?)";  
  
/* Construct the parameter array. */  
$employeeId = 5;  
$changeDate = "2005-06-07";  
$rate = 30;  
$payFrequency = 2;  
$params1 = array(  
               array($employeeId, null),  
               array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
               array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
               array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  
           );  
  
/* Execute the INSERT query. */  
$stmt1 = sqlsrv_query($conn, $tsql1, $params1);  
if( $stmt1 === false )  
{  
     echo "Error in execution of INSERT.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve the newly inserted data. */  
/* Define the query. */  
$tsql2 = "SELECT EmployeeID, RateChangeDate, Rate, PayFrequency  
          FROM HumanResources.EmployeePayHistory  
          WHERE EmployeeID = ? AND RateChangeDate = ?";  
  
/* Construct the parameter array. */  
$params2 = array($employeeId, $changeDate);  
  
/*Execute the SELECT query. */  
$stmt2 = sqlsrv_query($conn, $tsql2, $params2);  
if( $stmt2 === false )  
{  
     echo "Error in execution of SELECT.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve and display the results. */  
$row = sqlsrv_fetch_array( $stmt2 );  
if( $row === false )  
{  
     echo "Error in fetching data.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
echo "EmployeeID: ".$row['EmployeeID']."\n";  
echo "Change Date: ".date_format($row['RateChangeDate'], "Y-m-d")."\n";  
echo "Rate: ".$row['Rate']."\n";  
echo "PayFrequency: ".$row['PayFrequency']."\n";  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt($stmt1);  
sqlsrv_free_stmt($stmt2);  
sqlsrv_close($conn);  
?>  

См. также

Извлечение данных

Информация о примерах кода в документации

Практическое руководство. Указание типов данных PHP

Преобразование типов данных

Практическое руководство. Отправка и извлечение данных UTF-8 с помощью встроенной поддержки UTF-8