Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern Sie IPv6 in der Datenbank

knittl näher war, verwenden Sie anstelle von binary(16) varbinary(16) als user196009 beantwortet in einer verwandten Frage. Für mich geht das. Wie?

Speichern von IP:

<?php
  $query = "insert into stats(vis_ip, id_stat) values('" . inet_pton('66.102.7.104') . "', '1')"; // google's IP address
  // using a PDO wrapper. http://www.phpclasses.org/package/5206-PHP-Execute-database-queries-from-parameters-using-PDO.html
  include_once 'db.php';
  $c = new DB();
  $visit = $c->getResults($query); // stored as binary
?>

IP abrufen:

<?php
  $query = "SELECT `vis_ip` FROM `stats` WHERE `id_stat`=1";
  // PDO wrapper
  include_once 'db.php';
  $c = new DB();
  $stats = $c->getRow($query);
  echo inet_ntop($stats->vis_ip); // outputs 66.102.7.104
?> 

Es sollte mit IPv6-Adressen funktionieren (ich habe eine IPv4-Verbindung). Ich bin kein Experte, also weiß ich noch nicht, ob die varbinary-Länge korrekt ist, aber wie gesagt, es funktioniert für mich.

So überprüfen Sie, ob die „IPv6-Unterstützung“ in Ihrer PHP-Version/Ihrem Host aktiviert ist:

<?php
  phpinfo(INFO_GENERAL); // http://php.net/manual/es/function.phpinfo.php
?>