【问题标题】:PHP Free memory through PDOPHP 通过 PDO 释放内存
【发布时间】:2012-12-10 03:02:54
【问题描述】:

我想知道在get_result() 之后是否有任何来自mysqli 类的方法来释放内存,我看到人们使用closeCursor() 方法,但编译器说:

Call to undefined method mysqli_stmt::closeCursor()

我通过我准备好的语句对象来调用它,例如$Statement->closeCursor();

我看到 closeCursor 方法也关闭了与数据库的连接,这是否意味着如果我想进行另一个查询,我需要再次重新实例化 mysqli 类?如果是这样,有没有其他方法可以做同样的事情,但留下一个打开的连接?我只对释放 result_sets 留下的所有变量并正常启动另一个查询感兴趣,谢谢!

顺便说一句,我正在为我正在制作的自定义 mysql 备份系统做这个,干杯! - 埃德加。

【问题讨论】:

  • PDO 与 MySQLi 没有任何关系。你用的是哪个?
  • 先谢谢你的回答,对不起,我正在使用 MySQLi,(我一直认为 PDO = Prepared Object),首先我创建一个 mysqli 实例,然后我使用 stmt_init 方法创建声明对象。
  • 好吧,我在想是否可以在不影响类本身的情况下释放查询结果,哈哈,但看起来我必须取消设置对象或将其分配为 null。

标签: php mysql memory pdo


【解决方案1】:

closeCursor()不是mysqli语句方法。

您要查找的是free_resultfree

【讨论】:

  • 好,我没有看到@Neo 以错误的方式调用 closeCursor ,应该是这样的 PDOStatement :: closeCursor() 。相反,他已发布为 mysqli 静态方法。
  • 刚需,下次一定要好好阅读说明书再问lol,顺便谢谢大家的回答!
  • 没有错 @Neo ,它确实帮助了其他 SO 访问者
【解决方案2】:

我可以找到 closeCursor 的替代方法,您可以使用它来释放结果,而无需关闭连接。 (这个sn-p在评论部分的手册中发布)

<?php 
/** 
 * @param PDOStatement $oStm 
 */ 
public static function closeCursor($oStm) { 
    do $oStm->fetchAll(); 
    while ($oStm->nextRowSet()); 
} 
?>

来自 PHP 手册PDOStatement::closeCursor

按照那里的手册

PDOStatement::closeCursor() 被实现为可选的驱动程序特定方法(允许最大效率),或者如果没有安装驱动程序特定功能,则作为通用 PDO 回退。 PDO 通用回退在语义上与在 PHP 脚本中编写以下代码相同:

<?php
do {
    while ($stmt->fetch())
        ;
    if (!$stmt->nextRowset())
        break;
} while (true);
?>

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多