sha1
PHP funkcja zwraca ciąg reprezentujący liczbę szesnastkową.
Oznacza to, że jeśli wydrukujesz to na ekranie, wyświetli liczbę szesnastkową. Ale w pamięci jest to garść znaków ASCII.
Więc weź liczbę szesnastkową 1A2F
. Jako ASCII w pamięci, czyli 0x31413246
, zamiast 0x1A2F
Zwykły interfejs MySQL wysyła wszystkie argumenty jako ciągi. Używając normalnego interfejsu, MySQL przekonwertuje ciąg ASCII na wartość binarną.
Nowa metoda przygotowanych instrukcji wysyła wszystko jako binarne. Więc twoja ładna wartość "1A2F" zostanie teraz wysłana jako 0x31413246 i wstawiona do kolumny. - źródło:dev.mysql.com - Przygotowane oświadczenia
Zamiast tego przekonwertuj swój ciąg szesnastkowy, pakując go do ciągu binarnego za pomocą:
$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.
a następnie przekaż $binId
do przygotowanej instrukcji MySQLi zamiast $id.