【问题标题】:mysqli isn't returning the affected rowsmysqli 没有返回受影响的行
【发布时间】:2010-01-13 03:07:43
【问题描述】:

谁能告诉我我做错了什么?删除行后,我无法返回受影响的行。即使执行了删除操作,该函数也始终返回 int(0)。我阅读了我需要清除或关闭我所做的结果的地方,但它仍然不起作用。调试显示此错误:命令不同步。手册指出,要克服这个问题,必须使用 $result->free。就我而言,它不起作用。

    $res = db::query("CALL deleteUser('$phone')");

    if($res !== 1) {
        echo 'failed';
    } else {
        echo 'success';
    }

这是查询执行其操作的函数部分。

    if(self::$instance->query($query) === false){
        throw new exception("Failed");
    } return self::$instance->affected_rows;

【问题讨论】:

  • 为什么不在相同的条件下选择并在删除前回显它们?

标签: php mysql


【解决方案1】:

当调用存储过程或函数时,int(0) 注意到存储过程退出时没有任何错误。您需要选择存储过程中受影响的行数,然后让您的存储过程通过输出变量返回受影响的行。

【讨论】:

  • pygorex1,实际上有一个错误与之相关。它表示此时无法运行该命令;命令不同步。另外,我知道程序不能输出布尔值。这是真的吗?
【解决方案2】:

在执行PHP 中的MySQL 存储过程 时,有时会从服务器发送额外数据,而您尚未检索。 strong> 这将导致 “Commands out of Sync” 错误。我不记得确切的原因,但我很久以前在 MySQL 论坛上读过这个。您可以使用以下方式清理结果数据:

while (self::$instance->next_result()) { }

【讨论】:

  • 谢谢。我一直不清楚到底该把它放在哪里。这应该高于 return stmt,对吗?
猜你喜欢
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多