PHP操作MSSQL存储过程大致流程

PHP操作MSSQL存储过程在最近的项目中用到不少,这里总结一下。

1、连接MSSQL数据库 mssql_connect

if( !defined('MSDB_HOST') ){ define('MSDB_HOST', '1.2.3.4'); }
if( !defined('MSDB_PORT') ){ define('MSDB_PORT', 1433); }
if( !defined('MSDB_USER') ){ define('MSDB_USER', 'root'); }
if( !defined('MSDB_PASS') ){ define('MSDB_PASS', 'root'); }
if( !defined('MSDB_NAME') ){ define('MSDB_NAME', 'UserDB'); }

$link_mssql = mssql_connect(MSDB_HOST, MSDB_USER, MSDB_PASS) or die("SQL SERVER 数据库连接失败!");
mssql_select_db(MSDB_NAME, $link_mssql) or die("Select database failure");

2、初始化存储过程 mssql_init

以存储过程名称 user_reg 为例:

$stmt = mssql_init('user_reg');

3、绑定参数变量 mssql_bind

输入参数:

mssql_bind( $stmt, '@user_name', $user_name, SQLVARCHAR ); // 注意第三个参数必须为变量,否则报错
mssql_bind( $stmt, '@user_pass', $user_pass, SQLVARCHAR );

输出参数:

mssql_bind( $stmt, '@outvar', $output, SQLVARCHAR, true ); // 第五个参数为是否为输出标记

4、执行存储过程 mssql_execute

$retult = mssql_execute($stmt, true); // 第二个参数为是否返回结果集,更改设置与返回值无关

5、断开连接 mssql_free_statement

mssql_free_statement($stmt);

最后需要注意一下

PHP操作MSSQL存储过程,常态下输出结果集与输出参数二者不能同时得到,先看如下:

mssql_bind( $stmt, '@outvar', $output, SQLVARCHAR, true );

// mssql_execute第二个参数选择 true 时,上边的$output能输出参数,却不能返回结果集
$result = mssql_execute($stmt, true);

echo $output.'<br />';
*/

// mssql_execute第二个参数选择 false 时,返回结果集,上边的$output就不能输出参数
$result = mssql_execute($stmt, false);
$records = mssql_fetch_array($result); 
print_r($records);

如果想同时得到结果集和输出参数,可以使用

mssql_next_result($result);

注释:为每一个结果集调用一次mssql_next_result,在最后一个结果集返回之后,你再调用 mssql_next_result 就会得到返回值FALSE,这时候,你就可以访问输出参数了。

如果过程中需要做一下调试,可以使用如下代码:

die( 'MSSQL error: ' . mssql_get_last_message() );