|
mssql_init
Initializes a stored procedure or a remote stored procedure
(PHP 4 >= 4.0.7, PHP 5, PECL odbtp:1.1.1-1.1.4)
Examples ( Source code ) » mssql_init
Code Examples / Notes » mssql_initfjortizatcomunetdotes
this function was created to support OUTPUT parameters and return values with MSSQL stored procedures. Before this, you could use T-SQL statement EXECUTE and mssql_query to execute a stored procedure, and it was fine as long as you don't need to retrieve OUTPUT or RETVAL values. Now you can use this set of functions to execute and retrieve these values: mssql_init mssql_bind mssql_execute Parameters: - sp_name : stored procedure name. It passes this string to a native DB-lib call, so I guess it supports all kinds of schemas (like "ownew.sp_name" or "otherdb.owner.sp_name") - connection id: a connection resource obtained with mssql_connect or similar. If not provided, it will proceed just like other similar mssql_* functions: uses a default open connection or creates a new one. Return value: a resource id, called "statement", used in subsequent calls to mssql_bind and mssql_execute. Note that many of the native MSSQL data types are directly supported, but I think that some others must be converted by other means (from varchar values for example). These unsupported types are: SQLMONEY4,SQLMONEY,SQLBIT,SQLDATETIM4, SQLDATETIME, SQLDECIMAL, SQLNUMERIC, SQLVARBINARY, SQLBINARY,SQLIMAGE More info on supported types and new constants in mssql_bind shrockc
If you are performing a stored procedure inside a loop, it is a good idea to unset the variable that mssql_init returns so that you do NOT bind multiple values to the same stored procedure: foreach($input as $sid=>$value) { $stmt = mssql_init("sp_doSomething"); mssql_bind($stmt, "@sid", $sid, SQLINT4, false); mssql_bind($stmt, "@value", $value, SQLINT4, false); $result = mssql_execute($stmt); unset($stmt); // <---VERY important } Even doing the mssql_init outside the loop does not help because of the multiple binds happening inside the loop. Failing to do the above generates "Access Violations...memory cannot be 'written'" errors on the server. My hypothesis is that the error is generated when you try to bind to a stored procedure after it has already been executed. You have been warned. |
Change Languagemssql_bind mssql_close mssql_connect mssql_data_seek mssql_execute mssql_fetch_array mssql_fetch_assoc mssql_fetch_batch mssql_fetch_field mssql_fetch_object mssql_fetch_row mssql_field_length mssql_field_name mssql_field_seek mssql_field_type mssql_free_result mssql_free_statement mssql_get_last_message mssql_guid_string mssql_init mssql_min_error_severity mssql_min_message_severity mssql_next_result mssql_num_fields mssql_num_rows mssql_pconnect mssql_query mssql_result mssql_rows_affected mssql_select_db |