【问题标题】:mysqli - Do I really need to do $result->close(); & $mysqli->close();?mysqli - 我真的需要做 $result->close(); & $mysqli->close();?
【发布时间】:2011-02-22 04:44:18
【问题描述】:

刚开始使用mysqli。如果我在小型网站(流量方面)上处理小型数据集,我真的需要一直使用这些吗?

$result->close(); 
$mysqli->close();

另外,对于在没有框架的情况下进行自定义 PHP 和 MySQL 工作的人来说,mysqli 是与 MySQL 交互的一般首选方式吗?

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    PHP 将在脚本结束时关闭所有打开的文件和数据库连接。完成连接后手动执行此操作是一种好习惯,但如果您不这样做也不会造成灾难。如果您有一个将在整个脚本中使用的数据库连接,您也可以将其保持打开状态。

    在 PDO 上 +1

    【讨论】:

    • 如果脚本因致命错误终止,它似乎不会自动关闭它们
    【解决方案2】:

    根据当前文档,除了 $mysql->close() 之外,您应该始终使用 $mysql->kill()。

    $thread = $mysqli->thread_id;
    $mysqli->kill($thread);
    $mysqli->close();
    

    【讨论】:

    • 如前所述,最好自己进行清理,但据我所知,在撰写本文时,文档并没有提到您应该使用它。 +1 表示良好做法。
    • PDO 声明在我看来充其量是可疑的,我很确定你会在他们的 GitHub 存储库中看到 PDO 相关文件的最新时间戳。你有确凿的证据支持吗?
    • 除了@GordonM 提到的内容之外,答案中缺少关于“您应该始终使用$mysql->kill()”的声明。
    • @hakre 如果他在谈论文档mysqli::close 这只是字典中的一条评论,并且被否决了 8 次“你应该总是在 mysqli_close() 之前使用 mysqli_kill() 函数来实际关闭和释放 PHP 正在使用的 tcp 套接字。脚本执行后的垃圾收集和 mysqli_close() 不会自行杀死 tcp 套接字。"
    • 盐粒...请注意,我指的是旧 PHP 版本的文档。我确信从那时起连接处理已经发生了一些变化。另外,我现在是 Laravel 的大力倡导者,所以我很少再考虑连接生命周期了。只需通过交换“.env”文件中的连接来比较 PDO 和 MySQLi 的连接时间将是小菜一碟,尽管我并没有真正的尝试。
    【解决方案3】:

    您应该养成正确进行清理的习惯(完成后立即调用 close),否则资源泄漏会逐渐累积,直至影响性能。

    至于什么DB层,学习PDO应该是值得的,因为它设计精良,兼容所有主流数据库。

    【讨论】:

    • +1 对良好做法和进行清理。 -1 到 pdo。如果没有真正需要,只需添加另一层复杂性即可。
    • 如果使用 PDO 的唯一原因是与其他数据库的兼容性,那么对于我们这些从不也永远不会使用不同数据库的人来说,这个原因是没有意义的。
    【解决方案4】:

    在不再需要资源时尽早释放资源是一种很好的做法,这样可以避免在有更多并发用户访问同一页面时资源偷看

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 2011-02-22
      • 2012-02-23
      • 2012-04-26
      • 2012-06-06
      • 2010-10-14
      • 2014-09-26
      • 2015-01-08
      • 1970-01-01
      相关资源
      最近更新 更多