我准备将实时Web服务器从PHP 5.2.12更新到5.3.5。在准备中,我在第二台服务器上执行了更新,该服务器是实时服务器(“dev”服务器)的镜像。两台服务器都使用FreeBSD,并且都使用端口来安装PHP和MySQL。实时服务器使用MySQL 5.0.89,新升级的dev服务器使用5.1.54。
以下代码在实时服务器(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)上,返回值为零。注意 - 不为null(如果查询失败则返回),但是为零。我可以查看该表并验证实际上已插入新行,并且自动增量字段已正确提前。字段值目前为121288,因此它完全在PHP的整数范围内。我甚至在一个简单的页面上重新创建了类的代码并获得了相同的结果。 mysql_error()表示没有失败。错误报告设置为E_ALL,而不是窥视。
哎呀!有什么想法吗?