实操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() );