2011-02-09 198 views
3

我准备将PHP 5.2.12的实时Web服务器更新为5.3.5。在准备中,我已经在第二台服务器上进行了更新,这是现场服务器(“开发”服务器)的镜像。两台服务器都使用FreeBSD,并使用两个端口来安装PHP和MySQL。实时服务器使用MySQL 5.0.89,新升级的开发服务器使用5.1.54。mysql_insert_id()在PHP更新后停止工作

以下代码按照预期在活动服务器上执行(PHP 5.2.12/5.0.89),返回刚刚插入的AUTO_INCREMENT行的值。这个函数是整个站点使用的数据库类的一部分,其中“$ this - > _ private ['cn']”是资源链接。

public function insert ($sql=false) { 
    @mysql_select_db($this->_private['db_name'], $this->_private['cn']); 
    $res = null;    
    if (false !== $sql) { 
     $query_obj = mysql_query($sql, $this->_private['cn']); 
     if ($query_obj) 
      $res = mysql_insert_id($this->_private['cn']); 
    } 
    return $res; 
} 

在开发服务器(5.3.5/5.1.54)上,返回值为零。注 - 不为空(如果查询失败,则返回),但为零。我可以查看表格并验证是否已插入新行,并且自动增加字段已正确提前。字段值目前为121288,所以它完全在PHP的整数范围内。我甚至在一个简单的页面上重新创建了类的代码,并得到了相同的结果。 mysql_error()表示没有失败。错误报告设置为E_ALL,而不是在那里窥视。

ARGH!有任何想法吗?

+2

查询您应该提交错误报告。听起来你已经完成了尽职调查,而且看起来并不是你的错。它可能已经在追踪器中,甚至可能有解决方法。 – 2011-02-09 23:09:05

回答

1

看到这个bug其中建议在与SELECT LAST_INSERT_ID()

+0

这似乎是相关的,谢谢。然而,我注意到其中的一条评论指出“这个明显的错误会在很久以前被发现”......我不得不同意。然而......我在这里。 :)如果没有别的,那现在给了我一个解决方法。不需要在我的课程中添加另一个查询,但是我从未清楚mysql_insert_id()如何获取它的信息;也许额外的查询在资源消耗上相当于等价。 – 2011-02-09 23:18:11

相关问题