【问题标题】:Trying to clone an uncloneable object of class mysqli_result试图克隆类 mysqli_result 的不可克隆对象
【发布时间】:2012-05-06 12:27:20
【问题描述】:

抛出以下错误:

致命错误:试图克隆类 mysqli_result 的不可克隆对象

当我尝试直接使用克隆获取 mysql 查询结果时:

$result = mysqli_query($con, $query);
$resultsClone = clone $result;

有没有办法克隆 mysqli 对象?

【问题讨论】:

  • 在极端情况下,有这种可憎的:$clone = unserialize(serilize($target)); 我们假设$target 可以被序列化,这是另外一回事。

标签: php oop mysqli fatal-error


【解决方案1】:

将指针(返回)移动到结果的零行。 http://www.php.net/manual/ru/mysqli-result.data-seek.php

【讨论】:

    【解决方案2】:

    As KingCrunch already explained,克隆数据库结果指针并没有太多用处——它们的生存环境有限——就像任何指针或资源一样。

    但是,根据您想要执行的操作,您可以再次运行查询:

    $result      = mysqli_query($con, $query);
    $resultClone = mysqli_query($con, $query);
    

    或者您封装获取逻辑,以便根据应用程序的状态在同一资源上回退。

    【讨论】:

    • 这样做会很昂贵。我通过第一次循环来解决我想在第二次循环输出中重用它的数据并使用 data_seek 重置指针
    • @3emad:这就是我的意思。
    【解决方案3】:

    顾名思义,无法克隆不可克隆的对象。

    只是因为要多说一点:在这种特定情况下,mysqli-result 是(或多或少——我不知道确切的细节)指向“其他地方”结果的指针。克隆意味着,两个指针指向“其他地方”的相同结果,这又可能导致严重的副作用,因为从一个结果中获取结果肯定会影响另一个结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 2013-01-03
      • 2017-02-11
      相关资源
      最近更新 更多