sha1
на PHP функцията връща низово представяне на шестнадесетичен номер.
Това означава, че ако го отпечатате на екран, той ще покаже шестнадесетичен номер. Но в паметта това е куп ASCII символи.
И така, вземете шестнадесетичния номер 1A2F
. Като ASCII в паметта, това би било 0x31413246
, вместо 0x1A2F
Нормалният интерфейс на MySQL изпраща всички аргументи като низове. Когато използвате нормалния интерфейс, MySQL ще преобразува ASCII низа в двоична стойност.
Новият метод на подготвени изявления изпраща всичко като двоично. Така че вашата хубава стойност на "1A2F" вече ще бъде изпратена като 0x31413246 и вмъкната в колоната. - източник:dev.mysql.com - Подготвени изявления
Вместо това преобразувайте своя шестнадесетичен низ, като го опаковате в двоичен низ с помощта на:
$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.
и след това предайте $binId
към подготвеното изявление за MySQLi вместо $id.