430 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			430 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Safe;
 | |
| 
 | |
| use Safe\Exceptions\SqlsrvException;
 | |
| 
 | |
| /**
 | |
|  * The transaction begun by sqlsrv_begin_transaction includes
 | |
|  * all statements that were executed after the call to
 | |
|  * sqlsrv_begin_transaction and before calls to
 | |
|  * sqlsrv_rollback or sqlsrv_commit.
 | |
|  * Explicit transactions should be started and committed or rolled back using
 | |
|  * these functions instead of executing SQL statements that begin and commit/roll
 | |
|  * back transactions. For more information, see
 | |
|  * SQLSRV Transactions.
 | |
|  *
 | |
|  * @param resource $conn The connection resource returned by a call to sqlsrv_connect.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_begin_transaction($conn): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_begin_transaction($conn);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Cancels a statement. Any results associated with the statement that have not
 | |
|  * been consumed are deleted. After sqlsrv_cancel has been
 | |
|  * called, the specified statement can be re-executed if it was created with
 | |
|  * sqlsrv_prepare. Calling sqlsrv_cancel
 | |
|  * is not necessary if all the results associated with the statement have been
 | |
|  * consumed.
 | |
|  *
 | |
|  * @param resource $stmt The statement resource to be cancelled.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_cancel($stmt): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_cancel($stmt);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Returns information about the client and specified connection
 | |
|  *
 | |
|  * @param resource $conn The connection about which information is returned.
 | |
|  * @return array Returns an associative array with keys described in the table below.
 | |
|  *
 | |
|  * Array returned by sqlsrv_client_info
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * Key
 | |
|  * Description
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * DriverDllName
 | |
|  * SQLNCLI10.DLL
 | |
|  *
 | |
|  *
 | |
|  * DriverODBCVer
 | |
|  * ODBC version (xx.yy)
 | |
|  *
 | |
|  *
 | |
|  * DriverVer
 | |
|  * SQL Server Native Client DLL version (10.5.xxx)
 | |
|  *
 | |
|  *
 | |
|  * ExtensionVer
 | |
|  * php_sqlsrv.dll version (2.0.xxx.x)
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_client_info($conn): array
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_client_info($conn);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Closes an open connection and releases resourses associated with the connection.
 | |
|  *
 | |
|  * @param resource $conn The connection to be closed.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_close($conn): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_close($conn);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Commits a transaction that was begun with sqlsrv_begin_transaction.
 | |
|  * The connection is returned to auto-commit mode after sqlsrv_commit
 | |
|  * is called. The transaction that is committed includes all statements that were
 | |
|  * executed after the call to sqlsrv_begin_transaction.
 | |
|  * Explicit transactions should be started and committed or rolled back using these
 | |
|  * functions instead of executing SQL statements that begin and commit/roll back
 | |
|  * transactions. For more information, see
 | |
|  * SQLSRV Transactions.
 | |
|  *
 | |
|  * @param resource $conn The connection on which the transaction is to be committed.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_commit($conn): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_commit($conn);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Changes the driver error handling and logging configurations.
 | |
|  *
 | |
|  * @param string $setting The name of the setting to set. The possible values are
 | |
|  * "WarningsReturnAsErrors", "LogSubsystems", and "LogSeverity".
 | |
|  * @param mixed $value The value of the specified setting. The following table shows possible values:
 | |
|  *
 | |
|  * Error and Logging Setting Options
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * Setting
 | |
|  * Options
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * WarningsReturnAsErrors
 | |
|  * 1 (TRUE) or 0 (FALSE)
 | |
|  *
 | |
|  *
 | |
|  * LogSubsystems
 | |
|  * SQLSRV_LOG_SYSTEM_ALL (-1)
 | |
|  * SQLSRV_LOG_SYSTEM_CONN (2)
 | |
|  * SQLSRV_LOG_SYSTEM_INIT (1)
 | |
|  * SQLSRV_LOG_SYSTEM_OFF (0)
 | |
|  * SQLSRV_LOG_SYSTEM_STMT (4)
 | |
|  * SQLSRV_LOG_SYSTEM_UTIL (8)
 | |
|  *
 | |
|  *
 | |
|  * LogSeverity
 | |
|  * SQLSRV_LOG_SEVERITY_ALL (-1)
 | |
|  * SQLSRV_LOG_SEVERITY_ERROR (1)
 | |
|  * SQLSRV_LOG_SEVERITY_NOTICE (4)
 | |
|  * SQLSRV_LOG_SEVERITY_WARNING (2)
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_configure(string $setting, $value): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_configure($setting, $value);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Executes a statement prepared with sqlsrv_prepare. This
 | |
|  * function is ideal for executing a prepared statement multiple times with
 | |
|  * different parameter values.
 | |
|  *
 | |
|  * @param resource $stmt A statement resource returned by sqlsrv_prepare.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_execute($stmt): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_execute($stmt);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Frees all resources for the specified statement. The statement cannot be used
 | |
|  * after sqlsrv_free_stmt has been called on it. If
 | |
|  * sqlsrv_free_stmt is called on an in-progress statement
 | |
|  * that alters server state, statement execution is terminated and the statement
 | |
|  * is rolled back.
 | |
|  *
 | |
|  * @param resource $stmt The statement for which resources are freed.
 | |
|  * Note that NULL is a valid parameter value. This allows the function to be
 | |
|  * called multiple times in a script.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_free_stmt($stmt): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_free_stmt($stmt);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Gets field data from the currently selected row. Fields must be accessed in
 | |
|  * order. Field indices start at 0.
 | |
|  *
 | |
|  * @param resource $stmt A statement resource returned by sqlsrv_query or
 | |
|  * sqlsrv_execute.
 | |
|  * @param int $fieldIndex The index of the field to be retrieved. Field indices start at 0. Fields
 | |
|  * must be accessed in order. i.e. If you access field index 1, then field
 | |
|  * index 0 will not be available.
 | |
|  * @param int $getAsType The PHP data type for the returned field data. If this parameter is not
 | |
|  * set, the field data will be returned as its default PHP data type.
 | |
|  * For information about default PHP data types, see
 | |
|  * Default PHP Data Types
 | |
|  * in the Microsoft SQLSRV documentation.
 | |
|  * @return mixed Returns data from the specified field on success.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_get_field($stmt, int $fieldIndex, int $getAsType = null)
 | |
| {
 | |
|     error_clear_last();
 | |
|     if ($getAsType !== null) {
 | |
|         $result = \sqlsrv_get_field($stmt, $fieldIndex, $getAsType);
 | |
|     } else {
 | |
|         $result = \sqlsrv_get_field($stmt, $fieldIndex);
 | |
|     }
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Makes the next result of the specified statement active. Results include result
 | |
|  * sets, row counts, and output parameters.
 | |
|  *
 | |
|  * @param resource $stmt The statement on which the next result is being called.
 | |
|  * @return bool|null Returns TRUE if the next result was successfully retrieved, FALSE if an error
 | |
|  * occurred, and NULL if there are no more results to retrieve.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_next_result($stmt): ?bool
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_next_result($stmt);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Retrieves the number of fields (columns) on a statement.
 | |
|  *
 | |
|  * @param resource $stmt The statement for which the number of fields is returned.
 | |
|  * sqlsrv_num_fields can be called on a statement before
 | |
|  * or after statement execution.
 | |
|  * @return int Returns the number of fields on success.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_num_fields($stmt): int
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_num_fields($stmt);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Retrieves the number of rows in a result set. This function requires that the
 | |
|  * statement resource be created with a static or keyset cursor. For more information,
 | |
|  * see sqlsrv_query, sqlsrv_prepare,
 | |
|  * or Specifying a Cursor Type and Selecting Rows
 | |
|  * in the Microsoft SQLSRV documentation.
 | |
|  *
 | |
|  * @param resource $stmt The statement for which the row count is returned. The statement resource
 | |
|  * must be created with a static or keyset cursor. For more information, see
 | |
|  * sqlsrv_query, sqlsrv_prepare, or
 | |
|  * Specifying a Cursor Type and Selecting Rows
 | |
|  * in the Microsoft SQLSRV documentation.
 | |
|  * @return int Returns the number of rows retrieved on success.
 | |
|  * If a forward cursor (the default) or dynamic cursor is used, FALSE is returned.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_num_rows($stmt): int
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_num_rows($stmt);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Prepares a query for execution. This function is ideal for preparing a query
 | |
|  * that will be executed multiple times with different parameter values.
 | |
|  *
 | |
|  * @param resource $conn A connection resource returned by sqlsrv_connect.
 | |
|  * @param string $sql The string that defines the query to be prepared and executed.
 | |
|  * @param array $params An array specifying parameter information when executing a parameterized
 | |
|  * query. Array elements can be any of the following:
 | |
|  *
 | |
|  * A literal value
 | |
|  * A PHP variable
 | |
|  * An array with this structure:
 | |
|  * array($value [, $direction [, $phpType [, $sqlType]]])
 | |
|  *
 | |
|  * The following table describes the elements in the array structure above:
 | |
|  * @param array $options An array specifying query property options. The supported keys are described
 | |
|  * in the following table:
 | |
|  * @return resource Returns a statement resource on success.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_prepare($conn, string $sql, array $params = null, array $options = null)
 | |
| {
 | |
|     error_clear_last();
 | |
|     if ($options !== null) {
 | |
|         $result = \sqlsrv_prepare($conn, $sql, $params, $options);
 | |
|     } elseif ($params !== null) {
 | |
|         $result = \sqlsrv_prepare($conn, $sql, $params);
 | |
|     } else {
 | |
|         $result = \sqlsrv_prepare($conn, $sql);
 | |
|     }
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Prepares and executes a query.
 | |
|  *
 | |
|  * @param resource $conn A connection resource returned by sqlsrv_connect.
 | |
|  * @param string $sql The string that defines the query to be prepared and executed.
 | |
|  * @param array $params An array specifying parameter information when executing a parameterized query.
 | |
|  * Array elements can be any of the following:
 | |
|  *
 | |
|  * A literal value
 | |
|  * A PHP variable
 | |
|  * An array with this structure:
 | |
|  * array($value [, $direction [, $phpType [, $sqlType]]])
 | |
|  *
 | |
|  * The following table describes the elements in the array structure above:
 | |
|  * @param array $options An array specifying query property options. The supported keys are described
 | |
|  * in the following table:
 | |
|  * @return resource Returns a statement resource on success.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_query($conn, string $sql, array $params = null, array $options = null)
 | |
| {
 | |
|     error_clear_last();
 | |
|     if ($options !== null) {
 | |
|         $result = \sqlsrv_query($conn, $sql, $params, $options);
 | |
|     } elseif ($params !== null) {
 | |
|         $result = \sqlsrv_query($conn, $sql, $params);
 | |
|     } else {
 | |
|         $result = \sqlsrv_query($conn, $sql);
 | |
|     }
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Rolls back a transaction that was begun with sqlsrv_begin_transaction
 | |
|  * and returns the connection to auto-commit mode.
 | |
|  *
 | |
|  * @param resource $conn The connection resource returned by a call to sqlsrv_connect.
 | |
|  * @throws SqlsrvException
 | |
|  *
 | |
|  */
 | |
| function sqlsrv_rollback($conn): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \sqlsrv_rollback($conn);
 | |
|     if ($result === false) {
 | |
|         throw SqlsrvException::createFromPhpError();
 | |
|     }
 | |
| }
 |