PHP's sha1
funktion returnerer en strengrepræsentation af et hex-nummer.
Hvad det betyder er, at hvis du udskriver det på skærmen, vil det vise et hex-nummer. Men i hukommelsen er det en masse ASCII-tegn.
Så tag hex-nummeret 1A2F
. Som ASCII i hukommelsen ville det være 0x31413246
, i stedet for 0x1A2F
MySQL's normale grænseflade sender alle argumenter som strenge. Når du bruger den normale grænseflade, vil MySQL konvertere ASCII-strengen til en binær værdi.
Den nye forberedte erklæringsmetode sender alt som binært. Så din pæne værdi af "1A2F" vil nu blive sendt som 0x31413246 og indsat i kolonnen. - kilde:dev.mysql.com - Udarbejdede erklæringer
Konverter i stedet din Hex-streng ved at pakke den ind i en binær streng ved hjælp af:
$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.
og send derefter $binId
til den MySQLi udarbejdede erklæring i stedet for $id.