php 尝试克隆类mysqli_result的不可克隆对象

zaqlnxep  于 2023-03-11  发布在  PHP
关注(0)|答案(4)|浏览(136)

将抛出以下错误:
致命错误:尝试克隆类mysqli_result的不可克隆对象
当我尝试直接使用clone来处理mysql查询结果时:

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

有没有克隆mysqli对象方法?

nuypyhwy

nuypyhwy1#

克隆不可克隆的对象是不可能的,正如其名称所示。
只是因为要多讲一点:在这个特定的例子中,mysqli-result是(或多或少--我不知道确切的细节)一个指向“其他地方”结果的指针。克隆意味着,两个指针指向“其他地方”的同一个结果,这同样可能导致严重的副作用,因为从一个结果中获取结果肯定会影响另一个结果。

41ik7eoe

41ik7eoe2#

As KingCrunch already explained,克隆数据库结果指针没有多大用处-它们所处的上下文有限-就像克隆任何指针或资源一样。
但是,根据您要执行的操作,您可以再次运行查询:

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

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

vsmadaxz

vsmadaxz3#

我在尝试使用MySQL结果的输出作为字典来获取基于id的标题时遇到了类似的问题。
由于mysqli_result充当了指向存储在服务器某处的mysqli_query输出的指针,意味着一旦提取了它,就再也找不到它,当尝试再次访问它时,它将返回NULL(多次迭代或其他)。我能够克服它的一种方法是将mysqli_result提取到JSON array,这允许它充当字典(无限次地迭代它)。

$result = mysqli_query($con, $query);
while($row = mysqli_fetch_assoc($result )) {
    $results_clone[] = $row ; 
}

现在你可以无限次地使用/访问$results_clone。示例代码:

for($i=0;$i<count($results_clone);$i++){
    $results_clone[$i];
}

相关问题