sha1
di PHP la funzione restituisce una rappresentazione di stringa di un numero esadecimale.
Ciò significa che se lo stampi sullo schermo, verrà visualizzato un numero esadecimale. Ma in memoria, è un mucchio di caratteri ASCII.
Quindi, prendi il numero esadecimale 1A2F
. Come ASCII in memoria sarebbe 0x31413246
, invece di 0x1A2F
La normale interfaccia di MySQL invia tutti gli argomenti come stringhe. Quando si utilizza l'interfaccia normale, MySQL convertirà la stringa ASCII in un valore binario.
Il nuovo metodo di istruzione preparato invia tutto come binario. Quindi il tuo bel valore di "1A2F" verrà ora inviato come 0x31413246 e inserito nella colonna. - fonte:dev.mysql.com - Dichiarazioni preparate
Invece, converti la tua stringa esadecimale comprimendola in una stringa binaria usando:
$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.
e poi passa $binId
all'istruzione MySQLi preparata invece di $id.