【问题标题】:procedure calling in for loop throwing exception调用for循环的过程抛出异常
【发布时间】:2014-01-17 05:42:41
【问题描述】:

我在 for 循环中调用存储过程时遇到异常。这是我的代码

$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);

$total      = 0;
$error      = 0; 
$trimmed = explode("\n",file_get_contents($fileName));

for ($i = 0; $i < 2; $i++) {    
    $qry_ins = "call sampleProcedureTest();";
     try {
         mysql_query($qry_ins) or throw_ex(mysql_error());
         $total++;
     } catch(Exception $e) {
         echo $e;
         echo  $qry_ins;
         echo "</br></br>";
         $error++;
     }
}


我已经搜索但没有找到任何好的理由和解决方案
注意:当我删除循环时它工作正常。但我需要在循环中调用
请指导我有关此

编辑#1:这是程序

BEGIN
DECLARE uid VARCHAR(10) DEFAULT "0000";
SELECT SUBSTRING(MD5(RAND()) FROM 1 FOR 4) AS passwordStrin into uid FROM NO WHERE uid not in (Select ID from UIDLIST WHERE ID=uid);

    INSERT IGNORE INTO UIDLIST values(uid);

    select REPLACE(MSG,'URL',CONCAT('http://abc.org/?uid=',uid)) as message,SOURCE as sender,MODE as mode,uid  as uniqueid from testDB _MESSAGE;

    select REPLACE(MSG,'URL',CONCAT('http://abc.org/?uid=',uid)) as message,SOURCE as sender,MODE as mode,uid  as uniqueid from testDB_MESSAGE;
END

【问题讨论】:

  • 您遇到了什么异常?存储过程是什么样的?
  • 这里添加存储过程的代码
  • 程序已添加。请查看

标签: php stored-procedures


【解决方案1】:

您需要从您的过程中删除 select 语句(以防它们对您没有用处)。问题是该过程正在返回您的数据,这就是为什么当您从同一个脚本中调用它时会出现问题循环
另见Calling Stored Procedure in foreach loop - only first executed
另一种解决方案是(不推荐),以防您仍想放置 select statments in procedure 使用需要连接到 db ,调用 procedure ,在每次迭代中释放连接。

【讨论】:

    猜你喜欢
    • 2013-09-28
    • 2014-01-01
    • 2020-10-09
    • 2021-05-18
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多