将抛出以下错误:致命错误:尝试克隆类mysqli_result的不可克隆对象当我尝试直接使用clone来处理mysql查询结果时:
$result = mysqli_query($con, $query); $resultsClone = clone $result;
有没有克隆mysqli对象方法?
nuypyhwy1#
克隆不可克隆的对象是不可能的,正如其名称所示。只是因为要多讲一点:在这个特定的例子中,mysqli-result是(或多或少--我不知道确切的细节)一个指向“其他地方”结果的指针。克隆意味着,两个指针指向“其他地方”的同一个结果,这同样可能导致严重的副作用,因为从一个结果中获取结果肯定会影响另一个结果。
mysqli
41ik7eoe2#
As KingCrunch already explained,克隆数据库结果指针没有多大用处-它们所处的上下文有限-就像克隆任何指针或资源一样。但是,根据您要执行的操作,您可以再次运行查询:
$result = mysqli_query($con, $query); $resultClone = mysqli_query($con, $query);
或者封装获取逻辑,以便根据应用程序的状态在同一资源上回退。
vsmadaxz3#
我在尝试使用MySQL结果的输出作为字典来获取基于id的标题时遇到了类似的问题。由于mysqli_result充当了指向存储在服务器某处的mysqli_query输出的指针,意味着一旦提取了它,就再也找不到它,当尝试再次访问它时,它将返回NULL(多次迭代或其他)。我能够克服它的一种方法是将mysqli_result提取到JSON array,这允许它充当字典(无限次地迭代它)。
mysqli_query
NULL
mysqli_result
JSON array
$result = mysqli_query($con, $query); while($row = mysqli_fetch_assoc($result )) { $results_clone[] = $row ; }
现在你可以无限次地使用/访问$results_clone。示例代码:
$results_clone
for($i=0;$i<count($results_clone);$i++){ $results_clone[$i]; }
x7rlezfr4#
将指针移动(返回)到结果的零线。http://www.php.net/manual/ru/mysqli-result.data-seek.php
4条答案
按热度按时间nuypyhwy1#
克隆不可克隆的对象是不可能的,正如其名称所示。
只是因为要多讲一点:在这个特定的例子中,
mysqli
-result是(或多或少--我不知道确切的细节)一个指向“其他地方”结果的指针。克隆意味着,两个指针指向“其他地方”的同一个结果,这同样可能导致严重的副作用,因为从一个结果中获取结果肯定会影响另一个结果。41ik7eoe2#
As KingCrunch already explained,克隆数据库结果指针没有多大用处-它们所处的上下文有限-就像克隆任何指针或资源一样。
但是,根据您要执行的操作,您可以再次运行查询:
或者封装获取逻辑,以便根据应用程序的状态在同一资源上回退。
vsmadaxz3#
我在尝试使用MySQL结果的输出作为字典来获取基于id的标题时遇到了类似的问题。
由于mysqli_result充当了指向存储在服务器某处的
mysqli_query
输出的指针,意味着一旦提取了它,就再也找不到它,当尝试再次访问它时,它将返回NULL
(多次迭代或其他)。我能够克服它的一种方法是将mysqli_result
提取到JSON array
,这允许它充当字典(无限次地迭代它)。现在你可以无限次地使用/访问
$results_clone
。示例代码:x7rlezfr4#
将指针移动(返回)到结果的零线。http://www.php.net/manual/ru/mysqli-result.data-seek.php