2 votes

MYSQL - SELECT IP v4/v6, inet_pton & bin2hex

J'ai un peu de mal à sélectionner les valeurs correctes de mon serveur sql mysql.

L'ip peut être ipv6 et v4.

Table : Utilisateur{

...

ip binaire(16)

}

$ip = '192.168.10.115';
$ip = bin2hex(inet_pton($ip)); // Returns c0a80a73
$result = $this->db->select("SELECT * FROM User WHERE HEX(ip) = $ip");
// $result empty because in db its stored as:
// HEX(ip) = C0A80A73000000000000000000000000

Comment puis-je obtenir une correspondance viable avec le * 00000 * ?

Si l'entrée était une correspondance ipv6, cela serait correct, mais pas ip v4.

1voto

Dmitry Savy Points 689

UPDATE :

Les versions MySQL 5.6.3 et supérieures ont un support pour les adresses IPv6 - voir ce qui suit : "INET6_ATON(expr)"

Le type de données est VARBINARY(16) au lieu de BINARY(16) comme l'ont suggéré les commentaires précédents. La seule raison pour cela est que les fonctions MySQL fonctionnent pour les adresses IPv6 et IPv4. BINARY(16) est parfait pour stocker uniquement les adresses IPv6 et permet d'économiser un octet. VARBINARY(16) doit être utilisé lorsqu'on manipule des adresses IPv6 et IPv4.

1voto

drew010 Points 32825

Pouvez-vous utiliser VARBINARY au lieu de simplement BINARY ?

Du manuel MySQL sur Binaire/Varbinaire :

Si la valeur récupérée doit être la même que la valeur spécifiée pour sans remplissage, il est préférable d'utiliser VARBINARY ou l'un des types de données l'un des types de données BLOB.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X