PHP's sha1
functie retourneert een tekenreeksrepresentatie van een hexadecimaal getal.
Wat dat betekent is dat als je het op het scherm afdrukt, het een hexadecimaal getal zal weergeven. Maar in het geheugen zijn het een heleboel ASCII-tekens.
Neem dus het hexadecimale getal 1A2F
. Als ASCII in het geheugen is dat 0x31413246
, in plaats van 0x1A2F
De normale interface van MySQL stuurt alle argumenten als strings. Bij gebruik van de normale interface zal MySQL de ASCII-string converteren naar een binaire waarde.
De nieuwe voorbereide verklaringsmethode verzendt alles als binair. Dus je mooie waarde van "1A2F" wordt nu verzonden als 0x31413246 en ingevoegd in de kolom. - bron:dev.mysql.com - Opgemaakte verklaringen
Converteer in plaats daarvan uw Hex-tekenreeks door deze in een binaire reeks te verpakken met:
$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.
en geef dan $binId
. door naar de door MySQLi voorbereide verklaring in plaats van $id.