实操PHP操作MSSQL存储过程修改用户密码

PHP操作MSSQL存储过程的资料好少啊,这里放出老杨实操的主体部分,非最终代码,注释都在,看一下也许你用的上!

MSSQL 存储过程

MSSQL Server 2008 修改用户密码的存储过程

USE [GameUserDB]
GO
IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[UpdateUserInfo]') and OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[UpdateUserInfo]
GO
CREATE PROCEDURE [UpdateUserInfo]
	@dwUserID INT,
	@strCompellation NVARCHAR(16),
	@strQQ NVARCHAR(16),
	@strEmail NVARCHAR(32),
	@strSeatPhone NVARCHAR(32),
	@strMobilePhone NVARCHAR(16),
	@strDwellingPlace NVARCHAR(128),
	@strPostalCode NVARCHAR(8),
	@strUserNote NVARCHAR(256),
	@LogonPass char (32),
	@LogonPass2 char (32),
	@Typ NVARCHAR (50),
	@UserID INT,
	@FaceID INT
WITH ENCRYPTION AS
BEGIN
	IF @TYP='LostPass'
	BEGIN
		IF EXISTS (SELECT UserID FROM AccountsInfo WHERE UserID=@UserID And LogonPass=@LogonPass)
		BEGIN
			UPDATE [AccountsInfo] 
			SET  LogonPass	 = @LogonPass2 WHERE ( [UserID]	 = @UserID)
			SELECT '成功信息:修改登入密码成功!'
		END
		ELSE
		BEGIN
			SELECT '您的原密码输入错误!'
		END
	END	
END
return 0
go

PHP操作存储过程

PHP调用存储过程修改用户密码,本示例直接填写参数,实际环境可以从外部程序提交数据进行处理。

<?php
/* 存储过程测试 */
//error_reporting(0);

/* 存储过程: 数据库连接
------------------------------------------------------*/
define('MSDB_HOST', '1.2.3.4');
define('MSDB_PORT', 1433);
define('MSDB_USER', 'yang');
define('MSDB_PASS', 'yangjunwei');
define('MSDB_NAME', 'GameUserDB');
$conn = mssql_connect(MSDB_HOST,MSDB_USER,MSDB_PASS) or die("SQL SERVER 数据库连接失败!");
mssql_select_db(MSDB_NAME);

/* 存储过程: 修改指定用户密码
------------------------------------------------------*/
$action_type	= 'LostPass';		// 操作类型
$User_ID	= 1;			//用户ID
$User_name	= 'yang';		//用户名
$User_pass	= md5("123456");	//原用户密码
$User_pass2	= md5("654321");	//新用户密码
$User_null	= NULL;

// 初始化一个存储过程
$stmt = mssql_init("UpdateUserInfo", $conn) or die("initialize stored procedure failure");

// 绑定输入参数
mssql_bind($stmt, "@Typ", $action_type, SQLVARCHAR);
mssql_bind($stmt, "@UserID", $User_ID, SQLINT4);
mssql_bind($stmt, "@LogonPass", $User_pass, SQLCHAR);
mssql_bind($stmt, "@LogonPass2", $User_pass2, SQLCHAR);

mssql_bind($stmt, "@dwUserID", $User_null, SQLINT4, false, false);
mssql_bind($stmt, "@strCompellation", $User_null, SQLVARCHAR);
mssql_bind($stmt, "@strQQ", $User_null, SQLVARCHAR);
mssql_bind($stmt, "@strEmail", $User_null, SQLVARCHAR);
mssql_bind($stmt, "@strSeatPhone", $User_null, SQLVARCHAR);
mssql_bind($stmt, "@strMobilePhone", $User_null, SQLVARCHAR);
mssql_bind($stmt, "@strDwellingPlace", $User_null, SQLVARCHAR);
mssql_bind($stmt, "@strPostalCode", $User_null, SQLVARCHAR);
mssql_bind($stmt, "@strUserNote", $User_null, SQLVARCHAR);
mssql_bind($stmt, "@FaceID", $User_null, SQLINT4);

// 输出参数 和 输出结果集,只能选其一,貌似鱼与熊掌不可兼得

/*
mssql_bind($stmt,"RETVAL",$retval,SQLVARCHAR); //用于直接返回return -103此类的值。

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

echo $retval.'<br />';
echo "This user id is: ".$UserID.'<br />';
echo "This user name is: ".$Accounts.'<br />';
*/

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

// 为同时得到结果集和输出参数
// 需要为每一个结果集调用一次mssql_next_result,在最后一个结果集返回之后,你再调用mssql_next_result 就会得到返回值FALSE,这时候,你就可以访问输出参数了。
mssql_next_result($result); //下一个结果集,当输出最后一个结果集,再次执行输出FALSE的时候下一个就是输出参数

// MSSQL 调试
//die('MSSQL error: ' . mssql_get_last_message());
//exit;

?>

注释:MSSQL数据表大概设计

数据库:QPGameUserDB
数据表:AccountsInfo
数据列:UserID / LogonPass ……

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

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