ライブ Web サーバーを PHP 5.2.12 から 5.3.5 に更新する準備をしています。準備として、ライブサーバーのミラーである2番目のサーバー(「dev」サーバー)で更新を実行しました。どちらのサーバーも 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 に設定されており、のぞき見ではありません。
ぐっ!何か案は?