Linux在mysqli_stmt_close之后失去了价值

时间:2011-08-02 14:43:30

标签: php linux mysqli prepared-statement

我已经在我的Windows中编写了这个PHP并且工作正常,但是在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

我在XP上使用PHP 5.3.3

1 个答案:

答案 0 :(得分:1)

听起来这只是PHP处理内存的另一种方式。这很像在C ++中使用悬空指针。

PHP手册内容如下:

  

关闭准备好的声明。 mysqli_stmt_close()也释放语句句柄。如果当前语句具有挂起或未读结果,则此函数将取消它们,以便可以执行下一个查询。

在检索完所有结果(或将值传输到另一个变量)后,应始终调用“mysqli_stmt_close()”。

听起来Linux在释放时正在写入内存位置,而Windows保留旧值直到需要内存。