php无法调用MySQL存储过程,php调用mysql存储过程问题

mysql php 为什么我调用一次存储过程后再做其他查询后就错误了呢?

-------------------------------------------------------------

我要php调用mysql存储过程来查询表中所有数据,正常得出结果.

紧接着做其他查询时,不管使用什么语句都返回错误.

这是存储过程:

#查询shares表中的数据

#call proc_show_shares('sendtime'); //排序对象

delimiter //

DROP PROCEDURE IF EXISTS proc_show_shares //

CREATE PROCEDURE proc_show_shares (in sorttype varchar(15))

BEGIN

Set @sql = concat("select* from shares order by ", sorttype," desc");

PREPARE cmd from @sql;

EXECUTEcmd;

DEALLOCATEPREPARE cmd;

END//

delimiter ;

以下代码运行正常:

$query = "call proc_show_shares('sendtime')";

$results = mysql_query($query); //调用存储过程

while($result_row = mysql_fetch_row($results))

{

//{代码段}

$values[] = $result_row;

}

其中{代码段}是被注释掉的.当取消注释时,就错误了.

代码段为:

$result = mysql_query("select name from users where id = 10001") or die('靠');

上面的sql语句单独运行正常(当然是有结果的),连在一起就输出'靠'了.

为什么?

我可以输出values,但是加上mysql_query("select name from users where id = 10001") or die('靠');就不行了.然而这条语句本身是正确的.

所有过程中数据库一直是连接状态的.

回复讨论(解决方案)

这与存储过程返回的数据结构与普通查询不同有关

普通查询返回的是单一的资源,而执行存储过程返回的是一个资源数组(不准确,但意思到了)

就和你处理简单变量和数组变量不能用相同的方法一样,处理不同的结果集也应该用不同方法

但是 php 的数据库操作函数并没有这样做,于是就出现了你遇到的问题(当然不仅是你)

解决的方法很简单:先读空结果集,然后再执行其他查询

这样做也是有他的道理的:既然你使用了存储过程,那就应该继续将涉及的其他查询也放进存储过程中去

不该由他分门别类的替你处理

mysql_query("select name from users where id = 10001")这句查询一开始就是放在存储过程中来调用的,但是无法读取,所以放弃使用存储过程,直接使用sql语句,结果还是不行。看来第一次使用的存储过程的调用对后面的查询影响很大,前面的存储过程只要改为sql语句调用就一切正常了.

------------------------

另外mysql中,触发器、存储过程、sql语句是不是可以连续调用啊(在不产生递归的情况下).

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值