(Информация о версии неизвестна, возможно, только в SVN)

sqlsrv_executeExecutes a statement prepared with sqlsrv_prepare()


bool sqlsrv_execute ( resource $stmt )

Executes a statement prepared with sqlsrv_prepare(). This function is ideal for executing a prepared statement multiple times with different parameter values.

Список параметров


A statement resource returned by sqlsrv_prepare().

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.


Пример #1 sqlsrv_execute() example

This example demonstrates how to prepare a statement with sqlsrv_prepare() and re-execute it multiple times (with different parameter values) using sqlsrv_execute().

$connectionInfo = array( "Database"=>"dbName""UID"=>"username""PWD"=>"password");
$conn sqlsrv_connect$serverName$connectionInfo);
$conn === false) {
print_rsqlsrv_errors(), true));

$sql "UPDATE Table_1
        SET OrderQty = ?
        WHERE SalesOrderID = ?"

// Initialize parameters and prepare the statement. 
// Variables $qty and $id are bound to the statement, $stmt.
$qty 0$id 0;
$stmt sqlsrv_prepare$conn$sql, array( &$qty, &$id));
if( !
$stmt ) {
print_rsqlsrv_errors(), true));

// Set up the SalesOrderDetailID and OrderQty information. 
// This array maps the order ID to order quantity in key=>value pairs.
$orders = array( 1=>102=>203=>30);

// Execute the statement for each order.
foreach( $orders as $id => $qty) {
// Because $id and $qty are bound to $stmt1, their updated
    // values are used with each execution of the statement. 
if( sqlsrv_execute$stmt ) === false ) {
print_rsqlsrv_errors(), true));


When you prepare a statement that uses variables as parameters, the variables are bound to the statement. This means that if you update the values of the variables, the next time you execute the statement it will run with updated parameter values. For statements that you plan to execute only once, use sqlsrv_query().

Смотрите также


If you're used to working with sqlsrv_query, you're probably used to the following flow:

"SELECT * FROM mytable WHERE id=?";
$result sqlsrv_query($conn$query, array($myID));
$row sqlsrv_fetch_array($result);

Given that, you might think the following works:

$query "SELECT * FROM mytable WHERE id=?";
$stmt sqlsrv_prepare($conn$query, array(&$myID));
$result sqlsrv_execute($stmt);
$row sqlsrv_fetch_array($result);

It doesn't. The reason is that sqlsrv_execute, as noted above, returns true or false on success or failure, respectively. The variable that has your result is actually $stmt. Change the last row to 


and it works as expected.
2016-03-01 18:53:19
 If the sql contains INSERT, UPDATE or DELETE statements, the number of affected rows must be consumed. The sqlsrv_query returns a sql cursor that must be read to finish the transaction, if the result is non false. This same is valid for sqlsrv_execute. In this case the cursor must be also read using the prepared statement handle $smt.

Another solution is to place SET NOCOUNT ON at the top of the sqlsrv statement and all called procedures, functions and triggers.

We've practically observed it with sql statement with 500 inserts but only 368 was inserted without false returned. Prefixing by SET NOCOUNT ON or reading a cursor all rows were inserted.

See Processing Results (ODBC): https://docs.microsoft.com/en-us/sql/relational-databases/native-client-odbc-results/processing-results-odbc Each INSERT, UPDATE, and DELETE statement returns a result set containing only the number of rows affected by the modification. This count is made available when application calls SQLRowCount. ODBC 3.x applications must either call SQLRowCount to retrieve the result set or SQLMoreResults to cancel it. When an application executes a batch or stored procedure containing multiple INSERT, UPDATE, or DELETE statements, the result set from each modification statement must be processed using SQLRowCount or cancelled using SQLMoreResults. These counts can be cancelled by including a SET NOCOUNT ON statement in the batch or stored procedure.
2018-01-17 10:48:11

    Поддержать сайт на родительском проекте КГБ