sql >> Databasteknik >  >> RDS >> Mysql

Lagra IPv6 i databasen

knittl var närmare, istället för binary(16) använd varbinary(16) som user196009 besvarade i en relaterad fråga. Det funkar för mig. Hur?

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

Hämtar 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
?> 

Det borde fungera med IPv6-adresser (jag har en IPv4-anslutning). Jag är ingen expert så jag vet inte ännu om varbinär längd är korrekt, men som sagt, det fungerar för mig.

För att kontrollera om 'IPv6 Support' är aktiverat i din PHP-version/värd:

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


  1. Skillnaden mellan LIKE och ~ i Postgres

  2. Ställa in främmande nyckel med annan datatyp

  3. Multi_Curl med värden från mysql-kolumnen

  4. SOLR DataImport Error Det gick inte att köra frågan