Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các tham số được cung cấp cho Zend_Auth_Adapter_DbTable không tạo được câu lệnh sql hợp lệ

Nó phụ thuộc vào phiên bản MySQL như đã mô tả ở trên. Sau tài liệu MySQL cho phiên bản 5.5:

"Nếu một ứng dụng lưu trữ các giá trị từ một hàm, chẳng hạn như MD5 () hoặc SHA1 () trả về một chuỗi các chữ số hex, thì việc lưu trữ và so sánh hiệu quả hơn có thể thu được bằng cách chuyển đổi biểu diễn hex sang nhị phân bằng cách sử dụng UNHEX () và lưu trữ kết quả trong một cột BINARY (N). Mỗi cặp chữ số hex yêu cầu một byte ở dạng nhị phân, vì vậy giá trị của N phụ thuộc vào độ dài của chuỗi hex. N là 16 cho giá trị MD5 () và 20 cho giá trị SHA1 () . "

Vì vậy, thay vì hạ cấp phiên bản MySQL, bạn có thể làm như sau:

  • thay đổi loại cột 'mật khẩu' từ varchar (32) thành binary (16)
  • thêm hàm MySQL 'UNHEX ()' vào truy vấn MySQL của bạn trong mã ZF, ví dụ:
$adapter = new Zend_Auth_Adapter_DbTable(
    $db,
    'user',
    'login',
    'password',
    'UNHEX(MD5(CONCAT(?, passwordSalt)))'
);

Nó hoạt động tốt trong trường hợp của tôi.

Chỉnh sửa --Nếu muối mật khẩu của bạn cũng được lưu trữ trong cột nhị phân (ví dụ:nếu nó cũng là một chuỗi hex được tạo thông qua hàm SHA1) thì tham số cuối cùng của Zend_Auth_Adapter_DbTable phải là:'UNHEX (SHA1 (CONCAT (?, LOWER ( HEX (salt))))) 'Vì vậy, chúng tôi đang chuyển đổi muối trở lại thành chuỗi hex viết thường trước khi nối với mật khẩu. HEX () trả về muối của bạn ở dạng chữ hoa, do đó bạn có thể bỏ qua lệnh gọi LOWER () nếu muối của bạn ban đầu là chữ hoa trước khi bạn lưu trữ nó bằng UNHEX ().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chèn dữ liệu từ bảng này sang bảng khác trong mysql

  2. Nhập dữ liệu từ biểu mẫu vào Cơ sở dữ liệu PDO

  3. Tại sao không sử dụng quyền và người dùng MySQL tích hợp sẵn cho một trang web?

  4. Lỗi Rails-MySQL - hằng số chưa khởi tạo MysqlCompat ::MysqlRes

  5. Laravel 4 không thể chạy toàn bộ truy vấn RAW