codeigniter 调用存储过程实例
目的:实现登陆验证b_user表
uidusernamepasswordstatustokenid
用户编号用户名密码状态令牌
第一步:编写验证的存储过程
delimiter //
create procedure p_base_loginvalid(in name varchar(20),in pwd varchar(64 ),out LoginCode int )
begin
declare num int default 0;
declare Tpwd varchar(64);
declare enable enum('active','inactive' );
set LoginCode = 0;//登陆成功
select count(*), password,statusinto num,Tpwd ,enable from b_user where username = namelimit 1;
if num <> 1 then
setLoginCode = 1; //该用户不存在
end if;
ifSTRCMP(pwd,Tpwd) <> 0 then
set LoginCode = 2; //密码错误
end if;
ifSTRCMP(enable,'active' ) <> 0 then
set LoginCode = 3; //用户被禁用
end if;
end //
delimiter ;
第二步:在model里面调用该存储过程
function verifyuser($u,$p)
{
/*
方法名:verfyuser 调用数据库存储过程p_base_loginvalid进行身份用户确认
参数说明
输入参数列表:
$u 用户名字符串类型
$p 密码 字符串类型
返回值 boolean true,验证通过
修改记录:
*/
if(empty($u)||empty($p))
{
$this->session->set_flashdata('error', '用户名或者密码不能为空!');
return false;
}
else
{
$pwd = dohash($p);
$sql = "call p_base_loginvalid('$u','$pwd',@code)";
$this->db->query($sql);
$result = $this->db->query("select @code as code");
$logincode = $result->row();
$code = $logincode->code;
if($code) return true;
if($code == 1)
{
$this->session->set_flashdata('error', '用户名不存在!');
return false;
}
if($code == 2)
{
$this->session->set_flashdata('error', '密码错误!');
return false;
}
if($code == 3)
{
$this->session->set_flashdata('error', '用户已被禁用!');
return false;
}
}
} mark.ORACLE也是一样的方式吗? oracle 我没接触过 抱歉 但是原理肯定都是一样的。。 你摸索下吧。 一不小心看到了end if。吓了一跳,再看,原来是在mssql里边。
怀念以前在asp里边调用mssql存储过程的时代。
其实现在用c#和vb.net编写的asp.net程序,理论上也可以像java那样编译成机器码,从而跨平台的。不过其他平台对微软的这种“野心”,基本会持否定状态。
好久没碰.net了,现在应该是.net 3.0了吧。
页:
[1]