sql >> Database >  >> RDS >> Mysql

IPv6 opslaan in database

knittl was dichterbij, in plaats van binair (16) gebruik varbinary (16) as user196009 beantwoord in een gerelateerde vraag. Het werkt voor mij. Hoe?

IP opslaan:

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

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

Het zou moeten werken met IPv6-adressen (ik heb een IPv4-verbinding). Ik ben geen expert, dus ik weet nog niet of de varbinary-lengte correct is, maar hoe ik zei, het werkt voor mij.

Om te controleren of 'IPv6 Support' is ingeschakeld in uw PHP-versie/host:

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


  1. Hoe moeten Unix-tijdstempels worden opgeslagen in int-kolommen?

  2. SqlNullValueException bij het uitvoeren van een opgeslagen procedure met MySqlCommand

  3. Wat is een gegenereerde kolom?

  4. Omgaan met onbetrouwbare netwerken bij het maken van een HA-oplossing voor MySQL of MariaDB