我正在使用用户断言函数,例如:
debug_assert (
gettype($ob)=='object',
"Not an object <pre>"
.print_r($ob,1).'</pre>'
) or exit;
但我发现 print_r 在调用 $mysqli 时更改了 $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 ?是否有其他非 sql 函数可以更改 $mysqli 字段?有办法避免这种情况吗?
正如 @Progman 所说,它与长期存在的 php bug 有关:http://bugs.php.net/bug.php?id=67348
stat、print_r、var_dump 以及可能的其他调用“stat”的函数确实会将受影响的行重置为 -1。
现在已在 PHP>7.4 中修复,没有stat
不再是财产,而是一个stat()
method
就我而言, php
function print_it($thing) {
if ((gettype ($thing) == 'object')
and (get_class($thing) == 'mysqli'))
echo "...\naffected_rows => ".$thing->affected_rows."...";
else
print_r($thing);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)