この質問が何度も出されていることは知っていますが、最終的な解決策はどこにも見つかりませんでした。だからここに行きます:
DB を知らなくても、ベストプラクティスを使用して IP (IPv4 と IPv6 の両方) を DB 内に保存するにはどうすればよいですか? これは、PHP PDO などの DB 抽象化の目的の場合です。
マイナーな注意として、Windows で PEAR が必要だったので、PHP 5.2.17 を使用しています。
これを varbinary(16) として保存し、mysql 関数 inet6_ntop および inet6_pton を使用して IP を文字列としてやり取りすることを提案する人がいます。IPv6機能でMySQL 5を拡張することが示唆されています。PHP では、この質問のThiefMasterが示唆しているように、関数 inet_pton() および inet_ntop() は IPv4 と IPv6 をバイナリ形式に変換できますが、バイナリ コンテンツを SQL INSERT/UPDATE 文字列に渡す方法は不明です (およびこれらの php 関数は、Windows の php 5.3.0 でのみ提供されますが、これらをリバース エンジニアリングすることは可能です)。Jakeが行ったことと、DB 内の IP の整数表現に関する彼の結果が本当に気に入っています。、これを DB に実装する場合、これは遠く離れた不測の将来に役立つかもしれませんが、PHP PDO を使用した DB 抽象化の DB 相互互換性については確信が持てません。この投稿は、バイナリ値の保存に関する適切な回答を提供しているようですが、文字列へのエスケープされていないバイナリ インジェクションは潜在的な危険ではありませんか? また、このルートをたどると、何人の DB が varbinary(16)/int(128bit) を表現 IP に変換できますか? 開発者がクイック ルックアップを実行したい場合は?
最も簡単な方法は、ip文字列をそのままvarchar(45)に挿入することです。しかし、PHP ( djmaze(AT)dragonflycms(.)orgとして、またはFF dot st の MagicalTuxとしてリバース エンジニアリングされている) で inet_ntop() および inet_pton() 関数を使用して、複雑なルートをたどりたい人は、どのように保存しますか? IPv6をバイナリとして取得しますか? <?php $strIP = "2001:4860:b002::68"; ?>
から PDO を使用し、INSERT を使用してから SELECT 準備済みステートメントを使用する例を誰かが挙げることができますか?
ご覧のとおり、私は調査を行いましたが、この IPv6 の最終的な優れた実践方法は明確ではありません。