调用存储过程时出错

时间:2013-12-23 08:56:35

标签: php mysql stored-procedures phpmyadmin

我在phpMyAdmin中创建存储过程通过cpanel-> Localhost当我在phpMyAdmin中调用时它正确执行但是当我在我的在线调用它时显示以下错误。

存储过程

CREATE DEFINER=`username`@`localhost` PROCEDURE `GetAccountingLedger`()
DETERMINISTIC
BEGIN
SET @csum := 0;
SELECT posting_date, order_date_time, order_no, voucher_no, recovery_acc, product_name, dr_amount, cr_amount, (@csum := @csum + dr_amount - cr_amount) AS balance
FROM `voucher_s` WHERE recovery_acc=(SELECT username FROM username_for_accounting_ledger);
END

错误

警告:mysql_fetch_assoc():提供的参数不是第6行/home/cloudmar/public_html/php/general/test_s_procedure.php中的有效MySQL结果资源

通话方法

$sql = mysql_query("call GetAccountingLedger()");
while($result = mysql_fetch_assoc($sql)){
echo $result['order_date_time'].'<br>';
}

请有人帮助我。 感谢。

2 个答案:

答案 0 :(得分:1)

mysql_query的返回值是不明确的:它是在后续调用中使用的ressource,如果发生错误则是false

由于错误消息,后者已经发生。您应该首先处理错误,如

$sql = mysql_query("call GetAccountingLedger()");
if ( $sql === false )
{
      // mysql error handling 
}
else
{
      while($result = mysql_fetch_assoc($sql)){
          echo $result['order_date_time'].'<br>';
      }
}

答案 1 :(得分:0)

如果... WHERE recovery_acc=(SELECT username FROM username_for_accounting_ledger);中的子查询提供了多个结果记录,这很可能是因为它没有where子句,整个查询将被拒绝并出现错误。

这可能是PHP-mysql_query抛出错误的原因。

相关问题