在php中使用mysql存储过程以及碰到的问题解决方法
mysql 5中增加了存储过程功能,他们在php中使用很方便。
在php中调用存储过程和函数的主要步骤为。
一.准备存储过程的参数
如果存储过程有输入参数,则需要声明一个mysql变量,让mysql服务器知道此变量的存在,执行mysql语句 mysql_query(“set @mysqlvar =$phpvar”);
就可以在mysql服务器里面就有一个变量@mysqlvar。如果时IN参数,那么其值可以有phpvar传入。
二.调用存储过程
1.执行 call procedure()语句
也就是mysql_query(“call proceduer([var1]…)”);
2. 如果参数有OUT返回值,执行select @var,获取返回的参数结果
mysql_query(“select @var”)
接下来的操作就和php执行一般的mysql语句一样了。可以通过mydql_fetch_row()等函数获得结果。
如果是函数。 直接执行 select function() 就可以了。
———使用中碰到的问题解决——-
不能执行存储过程
在定义存储过程的时候,将存储过程类型设置为 DETERMINISTIC 。
定义的存储过程中有多个select语句,call失败
通过 mysql_error()输出错误提示 can’t return a result set in the given context
在mysql_connect连接数据库时指定 CLIENT_MULTI_RESULTS 标志。
-
<?php
-
define(’CLIENT_MULTI_RESULTS’, 131072);
-
-
$conn = mysql_connect("localhost", "root", "rootpwd",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error($conn));
-
mysql_select_db("mydb", $conn) or die("Could not select database");
-
-
$result = mysql_query("call proc_get_datas(2)", $conn);
-
-
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
-
// do something
-
}
-
-
mysql_free_result($result, $conn);
-
-
mysql_close($conn);
-
?>
Popularity: 7% [?]