Linux теряет ценность после mysqli_stmt_close - PullRequest
0 голосов
/ 02 августа 2011

Я закодировал этот PHP в моей Windows и работает нормально, но в Linux он теряет значение.

$stmt = mysqli_prepare($con,"SELECT name from `table` where ID=?");
mysqli_stmt_bind_param($stmt,"i",$id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $name);
mysqli_stmt_fetch($stmt);
mysqli_stmt_close($stmt);
if (is_null($name))
 echo 'Empty';

В Linux он всегда отображается пустым, но если я изменяю код на

...

mysqli_stmt_fetch($stmt);
if (is_null($name))
 echo 'Empty';
mysqli_stmt_close($stmt);

тогда не отображается EMPTY

Я использовал $ id со значением, которое существует в таблице.

проверено на

PHP 5.2 Suse Linux

Я использую PHP 5.3.3 на XP

1 Ответ

1 голос
/ 02 августа 2011

Похоже, что PHP по-другому обрабатывает свою память.Это очень похоже на использование висящего указателя в C ++.

PHP Manual читает:

Закрывает подготовленный оператор.mysqli_stmt_close () также освобождает дескриптор оператора.Если текущий оператор имеет ожидающие или непрочитанные результаты, эта функция отменяет их, чтобы можно было выполнить следующий запрос.

Вы должны всегда вызывать «mysqli_stmt_close ()» после получения всех результатов (илипередать значение в другую переменную).

Звучит так, как будто Linux записывает данные в ячейку памяти, когда она освобождается, тогда как Windows сохраняет старое значение до тех пор, пока память не понадобится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...