`print_r($ mysqli,1)`改变了$ mysqli-> affected_rows` - php

我正在使用用户断言功能,例如:

debug_assert (
    gettype($ob)=='object', 
    "Not an object <pre>"
        .print_r($ob,1).'</pre>' 
    ) or exit;

但是我发现在$ mysqli上调用print_r会改变$ mysqli-> affected_rows的结果:它将受影响的行从先前的'n'重置为-1。

测试代码:

$q= "INSERT INTO t_envois SET id_contact=243";

if (!$mysqli) die ("missing mysqli");
$ok = $mysqli->query($q);
if (!$ok) die ("bad query $q : ".$mysqli->errno.") ".$mysqli->error);

function get_affected_rows() {
    global $mysqli;
    return $mysqli->affected_rows;
}

echo "1) ".($mysqli->affected_rows)."<br>"; // 1
echo "2) ".($mysqli->affected_rows)."<br>"; // 1
echo "3) ".get_affected_rows()."<br>";    // 1 try other function
echo "4) ".get_affected_rows()."<br>";    // 1 (no issue)
echo "5) ".(print_r($mysqli,1))."<br>";    // affected_rows shown as 1
echo "6) ".($mysqli->affected_rows)."<br>"; // -1 CHANGED !!
echo "7) ".get_affected_rows()."<br>";    // -1 etc

调用print_r时,结果如何从1变为-1?是否还有其他更改$ mysqli字段的非SQL函数?有办法避免这种情况吗?

参考方案

正如@Progman所说,这与长期存在的php错误有关:http://bugs.php.net/bug.php?id=67348

stat,print_r,var_dump和其他可能调用“ stat”的函数会将受影响的行重置为-1。

就我而言,解决方法是重写一个固定的类似于print_r的函数:

function print_it($thing) {
    if ((gettype ($thing) == 'object') 
        and (get_class($thing) == 'mysqli'))
        echo "...\naffected_rows => ".$thing->affected_rows."...";
    else 
        print_r($thing);
}

在Codeigniter中以数组形式获取查询结果 - php

我有一个查询,如何获取结果作为数组? php大神给出的解决方案 像这样:$rs = $this->db->query(...); $array = $rs->result_array(); https://www.codeigniter.com/user_guide/database/results.html

PHP数组可以这样做吗? - php

可以说;我有一个$ friends数组,其中有2,000个不同的friendID号+我有一个带有10,000 bulletinID号的$ bulletins数组,该$ bulletins数组还将具有另一个值,该ID的用户ID是发布公告条目的用户现在可以获取所有具有与FriendsID数组中的userID匹配的userID的bulletinID号吗?甚至有可能…

PHP:如何从JSON数组获取属性? - php

我有以下JSON数组:使用PHP,如何从上面的JSON数组中获取geometery->location->lat&lng值?例如(伪代码):<?php $json = { "status": "OK", "results": [ { "types": [ �…

cURL-加载具有CloudFlare保护的网站 - php

我有一个网站,我想使用cURL加载。但是,我正在谈论的站点正在使用cloudflare保护。在cURL request =>上,它说“检查您的浏览器,您将在5秒钟内被重定向”,我被重定向到一个不存在的页面,因为我认为我没有通过某些保护测试。我一直在寻找答案很长时间,但我发现只有两个有用的链接:Link 1Link 2但是我仍然无法弄清楚。对我有帮助吗?…

哪个更好的做法?从Jquery响应获取HTML - php

这只是一个问题,以了解人们如何以及如何做到这一点,但是假设用户向列表中添加了一些内容,完成后,它将运行下面的ajax并更新.user-stream-list$.ajax({ url: "user-stream-list.php", success: function(data){ $(".user-stream-list…