3

ライブ 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 に設定されており、のぞき見ではありません。

ぐっ!何か案は?

4

1 に答える 1

1

クエリをフォローすることを推奨するこのバグを参照してくださいSELECT LAST_INSERT_ID()

于 2011-02-09T23:12:51.510 に答える