sha1
de PHP La función devuelve una representación de cadena de un número hexadecimal.
Lo que eso significa es que si lo imprime en la pantalla, mostrará un número hexadecimal. Pero en la memoria, es un montón de caracteres ASCII.
Entonces, toma el número hexadecimal 1A2F
. Como ASCII en la memoria sería 0x31413246
, en lugar de 0x1A2F
La interfaz normal de MySQL envía todos los argumentos como cadenas. Al usar la interfaz normal, MySQL convertirá la cadena ASCII a un valor binario.
El nuevo método de declaración preparada envía todo como binario. Entonces, su buen valor de "1A2F" ahora se enviará como 0x31413246 y se insertará en la columna. - fuente:dev.mysql.com - Declaraciones preparadas
En su lugar, convierta su cadena hexadecimal empaquetándola en una cadena binaria usando:
$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.
y luego pase $binId
a la declaración preparada de MySQLi en lugar de $id.