`print_r ($ mysqli, 1)` меняет `$ mysqli-> gat; disabled_rows`

Я использовал функции assert пользователя, такие как:

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

но я обнаружил, что print_r изменяет результаты $ mysqli-> disabled_rows при вызове на $ mysqli: он сбрасывает влияет_первых с предыдущего ‘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

Как можно изменить результат с 1 на -1 при вызове print_r? Существуют ли другие не-sql функции, которые изменяют поля $ mysqli? Есть ли способ избежать этого?

1

Решение

Как сказал @Progman, это связано с давней ошибкой php: http://bugs.php.net/bug.php?id=67348

stat, print_r, var_dump и, возможно, другая функция, которая вызывает ‘stat’, сбрасывает действие selected_rows в -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);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector