共用方式為


sqlsrv_prepare

建立與指定之連接有關聯的陳述式資源。

注意

這個函數非常適合執行多個查詢。如需詳細資訊,請參閱<如何:多次執行查詢>。

語法

sqlsrv_prepare( resource $conn, string $tsql [, array $params [, array $options]])

參數

$conn:與建立的陳述式有關聯的連接資源。

$tsql:對應至建立之陳述式的 Transact-SQL 運算式。

$params [選擇性]:對應至參數化查詢內之參數的值 array。此陣列的每一個元素都可以是以下其中一項:

  • 常值。

  • PHP 變數的參考。

  • 具有以下結構的 array

    array(&$value [, $direction [, $phpType [, $sqlType]]])
    

    注意

    以查詢參數形式所傳遞的變數應該由參考 (而不是值) 傳遞。例如,請傳遞 &$myVariable,而不是 $myVariable。由值參數而執行查詢時,會引發 PHP 警告。

    下表描述這些陣列元素:

    元素 描述

    &$value

    常值或 PHP 變數的參考。

    $direction[選擇性]

    其中一個用來指示參數方向的 SQLSRV_PARAM_* 常數:SQLSRV_PARAM_INSQLSRV_PARAM_OUTSQLSRV_PARAM_INOUT。預設值為 SQLSRV_PARAM_IN

    $phpType[選擇性]

    指定傳回值之 PHP 資料類型的 SQLSRV_PHPTYPE_* 常數。

    $sqlType[選擇性]

    指定輸入值之 SQL Server 資料類型的 SQLSRV_SQLTYPE_* 常數。

$options [選擇性]:設定查詢屬性的關聯陣列。下表列出支援的索引鍵和對應的值:

索引鍵 支援的值 描述

QueryTimeout

正整數值。

設定查詢逾時 (以秒為單位)。根據預設,驅動程式將會無限期等候結果。

SendStreamParamsAtExec

truefalse

預設值為 true

設定驅動程式在執行時傳送所有資料流資料 (true) 或是以區塊傳送資料流資料 (false)。根據預設,此值設定為 true。如需詳細資訊,請參閱<sqlsrv_send_stream_data>。

Scrollable

SQLSRV_CURSOR_FORWARD

SQLSRV_CURSOR_STATIC

SQLSRV_CURSOR_DYNAMIC

SQLSRV_CURSOR_KEYSET

SQL Server Driver for PHP 1.1 版新增了這個索引鍵。

如需有關這些值的詳細資訊,請參閱<指定資料指標類型和選取資料列>。

傳回值

陳述式資源。如果無法建立此陳述式資源,便會傳回 false

範例

下列範例會準備及執行陳述式。此陳述式在執行時 (請參閱<sqlsrv_execute>) 會更新 AdventureWorks 資料庫之 Sales.SalesOrderDetail 資料表中的欄位。此範例假設 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));
}

/* Set up Transact-SQL query. */
$tsql = "UPDATE Sales.SalesOrderDetail 
         SET OrderQty = ? 
         WHERE SalesOrderDetailID = ?";

/* Assign parameter values. */
$param1 = 5;
$param2 = 10;
$params = array( &$param1, &$param2);

/* Prepare the statement. */
if( $stmt = sqlsrv_prepare( $conn, $tsql, $params))
{
      echo "Statement prepared.\n";
} 
else
{
      echo "Statement could not be prepared.\n";
      die( print_r( sqlsrv_errors(), true));
}

/* Execute the statement. */
if( sqlsrv_execute( $stmt))
{
      echo "Statement executed.\n";
}
else
{
      echo "Statement could not be executed.\n";
      die( print_r( sqlsrv_errors(), true));
}

/* Free the statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

另請參閱

工作

如何:執行參數化查詢
如何:以資料流傳送資料

概念

有關文件集中的程式碼範例

其他資源

API 參考 (SQL Server Driver for PHP)
設計考量
使用方向參數