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.'
';
*/
// 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() );