0

だから私は自分のウェブサイトを購入したばかりのウェブサーバーにアップロードしています。すべてが私のコンピューターで完全に機能しました。しかし、データベースにデータを挿入するときに問題が発生しました。挿入されたすべての行に挿入される行を作成しているユーザーの IP アドレスまで問題を追跡しました。

値を返すphp関数がip2longあり、次のようになります。

function ip2()
    {
        return ip2long($_SERVER['REMOTE_ADDR']);
    }

次に、それをデータベースに挿入すると、SQL コードは次のようになります。

$sql = "INSERT INTO `Users` 
                    (
                        `Username`,
                        `Password`,
                        `Email`,
                        `ip_created`
                    )
                    VALUES 
                    (
                        '".$db->sql_escape(htmlspecialchars($this->username, ENT_QUOTES))."',
                        '".$db->sql_escape($this->secure_pass)."',
                        '".$db->sql_escape($this->clean_email)."',
                        '".ip2()."'
                    )";

$db->sql_query($sql))

ip_createdフィールドのint長さは 10 です

データベースとのやり取りはすべて php クラスで処理されますが、これが問題になる可能性があります。

問題がどこから来るのか本当にわかりません。本当に気になり始めています。私のlocalhostバージョンではすべてが完璧に機能しました。

4

1 に答える 1

3

id2longのマニュアルページのコメントには次のものが含まれます。

64ビットシステムを実行している場合、ip2longはMySQL INTに適合しない64ビット整数になることに注意してください。64ビットシステムではip2longが負の整数を返すことはないため、BIGINTまたはINTUNSIGNEDを使用できます。https://bugs.php.net/bug.php?id=54338も参照してください

それが原因でしょうか?

于 2012-09-17T13:30:33.677 に答える