Question

Je suis en cours d'exécution dans un problème parce que ma base de données contient des données BIGINT (nombres entiers 64 bits), mais la version de PHP est en cours d'exécution, je suis seulement 32 bits.

Alors, quand je sors valeur d'une table je me retrouve avec une chaîne numérique représentant un entier de 64 bits dans la base 10. Ce que je voudrais idéalement faire est d'utiliser l'entier de 64 bits comme bitmask. Je dois donc aller soit deux entiers de 32 bits (un représentant de la partie supérieure et une partie inférieure) ou une chaîne numérique dans la base 2.

Le problème est que je ne peux pas multiplier juste parce que mon PHP est 32 bits. Suis-je bloqué?

Était-ce utile?

La solution

Vous pouvez utiliser MySQL opérateurs de décalage peu à diviser le nombre entier de 64 bits en deux entiers de 32 bits. Ainsi, vous pouvez sélectionner:

select (myBigIntField & 0xffffffff) as lowerHalf,
       (myBigIntField >> 32) as upperHalf

Autres conseils

Vous avez quelques options:

  1. Utilisez soit BCMath ou GMP si elles sont incluses dans votre installation de PHP. Les deux devraient fournir des entiers de longueur arbitraire.
  2. Demandez la base de données pour convertir l'entier à une chaîne de bits longue de 64 caractères au lieu
  3. Ecrire une implémentation bignum vous (plus de travail: -))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top