PHP里调用MYSQL存储过程问题,进来看一下吧!

DawnWind 2006-01-06 03:27:56
我建存储过程如下:

DROP PROCEDURE IF EXISTS updadmpsw //
CREATE PROCEDURE updadmpsw (IN oldpsw VARCHAR(40), IN newpsw VARCHAR(40), OUT res INT)
BEGIN
DECLARE oldp VARCHAR(40);
DECLARE newp VARCHAR(40);

SET res = 0;
SET oldp = oldpsw;
SET newp = newpsw;

SELECT @adpsw := `value` FROM `system_param_data_tbl` WHERE `config_flag` ='ADMINPSW';

IF @adpsw = oldp THEN
UPDATE `system_param_data_tbl` SET `value` = newp WHERE `config_flag` = 'ADMINPSW';
SET res=1;
END IF;

END; //


在命令行输入
call updadmpsw("admin","",@p);和
select @p;
可以得到结果。
但是在PHP程序里
用下面语句:
1) $res=mysql_quer("set @res=\"".$newPsw."\"",$db);

2) $res =mysql_quer("call updadmps(\"".$oldPsw."\",\"".$newPsw."\",@res);",$db);

3) $res =mysql_quer("select @res;",$db);

4) $row=mysql_fetch_array($res ,MYSQL_ASSOC);

5) return $row['@res'];

在第2条语句就返回false了。

请高手看看是哪里出了问题,再线等,解决既给分!
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DawnWind 2006-01-09
  • 打赏
  • 举报
回复
没人做过么?是不是mysql接口的问题,我换成mysqli 第2句可以了,但是第3句就总是返回false
,路过的大侠们,帮看看。
DawnWind 2006-01-09
  • 打赏
  • 举报
回复
up
DawnWind 2006-01-09
  • 打赏
  • 举报
回复
不行的。

用mysql接口可能不支持吧,我改用mysqli后发现执行
3) $res =mysqli_query($db,"select @res;"); 时出现
Query failed: Lost connection to MySQL server during query 错误,
分析可能是执行存储过程时出错了,我将存储过程中的select 语句去掉就可以返回@res,请高手再看看存储过程有什么问题呢?
xuzuning 2006-01-09
  • 打赏
  • 举报
回复
尝试这样
$res =mysql_quer("call updadmps('$oldPsw','$newPsw',@res)",$db);
DawnWind 2006-01-06
  • 打赏
  • 举报
回复
楼上的,先谢谢,这篇文章我看过,就是按这个写的做的。可是不行啊。
leyan728 2006-01-06
  • 打赏
  • 举报
回复
存储过程和函数是MySql5.0刚刚引入的。关于这方面的操作在PHP里面没有直接的支持。但是由于Mysql PHP API的设计,使得我们可以在以前的PHP版本中的mysql php api中支持存储过程和函数的调用。

在php中调用存储过程和函数。

1。调用存储过程的方法。

a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,

一个php变量(也可以不必,只是没有php变量时,没有办法进行动态输入),一个Mysql

变量。

b。如果存储过程有OUT变量,声明一个Mysql变量。

mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句。

入set @mysqlvar=$phpvar ;

c。使用mysql_query()/mysql_db_query()执行mysql 变量声明语句。

mysql_query("set @mysqlvar【=$pbpvar】");

这样,在mysql服务器里面就有一个变量,@mysqlar。如果时IN参数,那么其值可以有phpar传入。

d。 如果时存储过程。

1。执行 call procedure()语句。

也就是mysql_query("call proceduer([var1]...)");

2. 如果有返回值,执行select @ar,返回执行结果。

mysql_query("select @var)"

接下来的操作就和php执行一般的mysql语句一样了。可以通过mydql_fetch_row()等函数获得结果。

如果时函数。 直接执行 select function() 就可以了。


$host="localhost";
$user="root";
$password="11212";
$db="samp_db";
$dblink=mysql_connect($host,$user,$password)
or die("can't connect to mysql");
mysql_select_db($db,$dblink)
or die("can't select samp_db");
$res=mysql_query("set @a=$password",$dblink);
$res=mysql_query("call aa(@a)",$dblink);
$res=mysql_query("select @a",$dblink);
$row=mysql_fetch_row($res);
echo $row[0];

DawnWind 2006-01-06
  • 打赏
  • 举报
回复
up

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧