Mysql
 sql >> Base de données >  >> RDS >> Mysql

Stocker IPv6 dans la base de données

knittl était plus proche, au lieu de binary(16) utilisez varbinary(16) comme user196009 répondu dans une question connexe. Ça marche pour moi. Comment ?

IP de stockage :

<?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
?>

Récupération de l'IP :

<?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
?> 

Cela devrait fonctionner avec les adresses IPv6 (j'ai une connexion IPv4). Je ne suis pas un expert, donc je ne sais pas encore si la longueur varbinary est correcte, mais comme je l'ai dit, cela fonctionne pour moi.

Afin de vérifier si 'IPv6 Support' est activé dans votre version/hôte PHP :

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