PHP调用MYSQL存储过程的问题,请教高手!

趴小哥 | KingFly 2011-01-24 03:31:21
我是想向存储过程里传入一个商品ID号,从而在商品表里获得该商品所有信息。

MYSQL的存储过程我是这样写的:
CREATE PROCEDURE shop_getById(in id int)
BEGIN
select shop.* from shop where shop.id = id;
END;

在MYSQL里call getById(10);
能获得10号商品的各个字段数据。

我通过PHP来取就出问题了。取不出值。都是空的。

<?php
include_once 'admin/conn.php'; //数据库连接

$res = mysql_query("set @id=10", $con);
$res = mysql_query("call shop_getById(@id)", $con);
$row = mysql_fetch_row($res);
echo "商品信息:" . $row[0] . "," . $row[1] . "," . $row[2];
?>

请问如何取,谢谢。
...全文
731 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyaspnet 2011-01-25
  • 打赏
  • 举报
回复
动手实践一下就没问题了
skyaspnet 2011-01-25
  • 打赏
  • 举报
回复
php mysql 存储过程实例


PHP与MySQL存储过程 实例一:无参的存储过程


$conn = MySQL_connect('localhost','root','root') or die ("数据连接错误!!!"); MySQL_select_db('test',$conn); $sql = " create procedure myproce() begin INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0'); end; "; MySQL_query($sql);
创建一个myproce的存储过程

$sql = "call test.myproce();";
MySQL_query($sql);
调用myproce的存储过程,则数据库中将增加一条新记录。

PHP与MySQL存储过程 实例二:传入参数的存储过程



$sql = " create procedure myproce2(in score int) begin if score >= 60 then select 'pass'; else select 'no'; end if; end; "; MySQL_query($sql);
创建一个myproce2的存储过程

$sql = "call test.myproce2(70);"; MySQL_query($sql);

调用myproce2的存储过程,看不到效果,可以在cmd下看到结果。

PHP与MySQL存储过程 实例三:传出参数的存储过程



$sql = " create procedure myproce3(out score int) begin set score=100; end; "; MySQL_query($sql);
创建一个myproce3的存储过程

$sql = "call test.myproce3(@score);"; MySQL_query($sql);
调用myproce3的存储过程



$result = MySQL_query('select @score;'); $array = MySQL_fetch_array($result); echo '<pre>';print_r($array); PHP与MySQL
存储过程 实例四:传出参数的inout存储过程



$sql = " create procedure myproce4(inout sexflag int) begin SELECT * FROM user WHERE sex = sexflag; end; "; MySQL_query($sql);
创建一个myproce4的存储过程
$sql = "set @sexflag = 1"; MySQL_query($sql); 设置性别参数为1

$sql = "call test.myproce4(@sexflag);"; MySQL_query($sql);
调用myproce4的存储过程,在cmd下面看效果
skyaspnet 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 wx800427 的回复:]
我是想向存储过程里传入一个商品ID号,从而在商品表里获得该商品所有信息。

MYSQL的存储过程我是这样写的:
CREATE PROCEDURE shop_getById(in id int)
BEGIN
select shop.* from shop where shop.id = id;
END;

在MYSQL里call getById(10);
能获得10号商品的各个字段……
[/Quote]

参考:

php调用mysql存储过程和函数的方法,阅读php调用mysql存储过程和函数的方法,存储过程和函数是MySql5.0刚刚引入的。关于这方面的操作在PHP里面没有直接的支持。但是由于Mysql PHP API的设计,使得我们可以在以前的PHP版本中的mysql php api中支持存储过程和函数

存储过程和函数是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];
ms_X0828 2011-01-25
  • 打赏
  • 举报
回复
你看看这个把:
http://blog.csdn.net/zhangking/archive/2010/03/06/5351201.aspx
  • 打赏
  • 举报
回复
ihefe 还是报错啊
ihefe 2011-01-24
  • 打赏
  • 举报
回复
发贴重复

$res = mysql_query("set @id=10", $con);
$res = mysql_query("call shop_getById(@id)", $con);
while($row = mysql_fetch_assoc($res)){
$arr[]=$row;
}

print_r($arr);
echo $arr[0][1];

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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