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

PHP - insertion de données binaires dans mysql à l'aide d'instructions préparées

sha1 de PHP renvoie une représentation sous forme de chaîne d'un nombre hexadécimal.

Cela signifie que si vous l'imprimez à l'écran, il affichera un numéro hexadécimal. Mais en mémoire, c'est un tas de caractères ASCII.

Alors, prenez le numéro hexadécimal 1A2F . En tant qu'ASCII en mémoire, ce serait 0x31413246 , au lieu de 0x1A2F

L'interface normale de MySQL envoie tous les arguments sous forme de chaînes. Lors de l'utilisation de l'interface normale, MySQL convertira la chaîne ASCII en une valeur binaire.

La nouvelle méthode d'instruction préparée envoie tout en binaire. Ainsi, votre belle valeur de "1A2F" sera désormais envoyée sous la forme 0x31413246 et insérée dans la colonne. - source :dev.mysql.com - Déclarations préparées

Au lieu de cela, convertissez votre chaîne hexadécimale en la compressant dans une chaîne binaire en utilisant :

$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.

puis passez $binId à l'instruction préparée MySQLi au lieu de $id.