sha1
của PHP hàm trả về một biểu diễn chuỗi của một số hex.
Điều đó có nghĩa là nếu bạn in nó ra màn hình, nó sẽ hiển thị một số hex. Nhưng trong bộ nhớ, nó là một loạt các ký tự ASCII.
Vì vậy, hãy lấy số hex 1A2F
. Dưới dạng ASCII trong bộ nhớ sẽ là 0x31413246
, thay vì 0x1A2F
Giao diện bình thường của MySQL gửi tất cả các đối số dưới dạng chuỗi. Khi sử dụng giao diện bình thường, MySQL sẽ chuyển đổi chuỗi ASCII thành giá trị nhị phân.
Phương thức câu lệnh chuẩn bị mới gửi mọi thứ dưới dạng nhị phân. Vì vậy, giá trị đẹp của bạn là "1A2F" bây giờ sẽ được gửi dưới dạng 0x31413246 và được chèn vào cột. - nguồn:dev.mysql.com - Báo cáo chuẩn bị sẵn
Thay vào đó, hãy chuyển đổi chuỗi Hex của bạn bằng cách đóng gói nó thành một chuỗi nhị phân bằng cách sử dụng:
$binId = pack("H*", $id); // this string is not ASCII, don't print it to the screen! That will be ugly.
và sau đó chuyển $binId
sang câu lệnh chuẩn bị MySQLi thay vì $ id.