我正准备将实时 Web 服务器从 PHP 5.2.12 更新到 5.3.5。在准备中,我已经在第二台服务器上执行了更新,该服务器是实时服务器(“开发”服务器)的镜像。两台服务器都使用 FreeBSD,并且都使用端口来安装 PHP 和 MySQL。实时服务器使用 MySQL 5.0.89,新升级的开发服务器使用 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,而不是在那里窥视。
啊!有任何想法吗?