PHPs sha1
funktion returnerar en strängrepresentation av ett hexadecimalt tal.
Vad det betyder är att om du skriver ut det på skärmen kommer det att visa ett hexadecimalt nummer. Men i minnet är det ett gäng ASCII-tecken.
Så ta det hexadecimala numret 1A2F
. Som ASCII i minnet skulle det vara 0x31413246
, istället för 0x1A2F
MySQL:s normala gränssnitt skickar alla argument som strängar. När du använder det normala gränssnittet kommer MySQL att konvertera ASCII-strängen till ett binärt värde.
Den nya förberedda satsmetoden skickar allt som binärt. Så ditt fina värde på "1A2F" kommer nu att skickas som 0x31413246 och infogas i kolumnen. - källa:dev.mysql.com - Förberedda uttalanden
Konvertera istället din Hex-sträng genom att packa den till en binär sträng med:
$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.
och skicka sedan $binId
till det MySQLi-förberedda uttalandet istället för $id.