MeekroDB错误“命令不同步;您现在无法运行此命令”

时间:2012-12-13 21:19:00

标签: php mysql meekro

我有一个包含以下行的PHP脚本:

require_once 'meekrodb.2.1.class.php';
DB::$user = 'usr';
DB::$password = 'pwd';
DB::$dbName = 'db';
DB::$encoding = 'utf8';

$results = DB::queryFirstField("
    CALL getSequence('time_id', %i); // ***** Stored procedure call *****
", TENANT_ID);

DB::insert('timeentry', array(
    'tenant_id' => TENANT_ID,
    'time_id' => $results,
    'timestart' => DB::sqleval("now()"),
    'assig_id' => $assig_id
));

我收到以下错误:

  

QUERY:INSERT INTO timeentrytenant_idtime_idtimestartassig_id)VALUES(1,'42',now(),' 1' )

     

错误:命令不同步;你现在不能运行这个命令

如果我用SELECT语句替换对存储过程的调用,一切正常。

$results = DB::queryFirstField("
    SELECT 45; // ***** SELECT statement *****
");

DB::insert('timeentry', array(
    'tenant_id' => TENANT_ID,
    'time_id' => $results,
    'timestart' => DB::sqleval("now()"),
    'assig_id' => $assig_id
));

我没有分析MeekroDB库(http://www.meekro.com)的内部。

我尝试在事务中包装每个语句但是在调用存储过程后立即执行COMMIT时出现相同的错误。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

调用MySQL中的存储过程会产生多个结果集。也就是说,存储的proc 可能有多个SELECT,因此客户端必须迭代几个结果集才能完成CALL的处理。

请参阅此问题的答案中的示例:Retrieving Multiple Result sets with stored procedure in php/mysqli

在完成CALL的所有结果之前,它不会被视为已关闭,并且MySQL不允许您在当前查询完成之前运行另一个查询。

我不太了解MeekroDB库,但是浏览在线文档我没有看到任何方法来迭代多个结果集。因此,可能没有任何方法可以安全地调用存储过程。我建议您与作者联系以获取具体支持:http://www.meekro.com/help.php