Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Parameter yang diberikan ke Zend_Auth_Adapter_DbTable gagal menghasilkan pernyataan sql yang valid

Itu tergantung pada versi MySQL seperti yang dijelaskan di atas. Berikut Dokumentasi MySQL untuk versi 5.5:

"Jika aplikasi menyimpan nilai dari fungsi seperti MD5() atau SHA1() yang mengembalikan string digit hex, penyimpanan dan perbandingan yang lebih efisien dapat diperoleh dengan mengonversi representasi hex ke biner menggunakan UNHEX() dan menyimpan hasilnya di kolom BINARY(N). Setiap pasangan digit hex membutuhkan satu byte dalam bentuk biner, jadi nilai N tergantung pada panjang string hex. N adalah 16 untuk nilai MD5() dan 20 untuk nilai SHA1() ."

Jadi, alih-alih menurunkan versi MySQL, Anda dapat melakukan hal berikut:

  • ubah jenis kolom 'sandi' dari varchar(32) menjadi biner(16)
  • tambahkan fungsi MySQL 'UNHEX()' ke kueri MySQL Anda dalam kode ZF, misalnya:
$adapter = new Zend_Auth_Adapter_DbTable(
    $db,
    'user',
    'login',
    'password',
    'UNHEX(MD5(CONCAT(?, passwordSalt)))'
);

Ini bekerja dengan baik dalam kasus saya.

Sunting --Jika garam kata sandi Anda juga disimpan dalam kolom biner (misalnya jika itu juga merupakan string hex yang dihasilkan melalui fungsi SHA1) maka parameter terakhir dari Zend_Auth_Adapter_DbTable harus:'UNHEX(SHA1(CONCAT(?, LOWER( HEX(salt)))))'Jadi, kita mengubah salt kembali menjadi string hex huruf kecil sebelum digabungkan dengan kata sandi. HEX() mengembalikan garam Anda dalam huruf besar sehingga Anda bisa menghilangkan panggilan LOWER() jika garam Anda awalnya huruf besar sebelum Anda menyimpannya menggunakan 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. MySQL ERROR 2026 - Kesalahan koneksi SSL - Ubuntu 20.04

  2. Cara memasukkan tag ke dalam database menggunakan jquery html dan php

  3. ASP.NET menggunakan SqlConnection menghubungkan MySQL

  4. apa yang akan menjadi kueri sql untuk memeriksa pasangan nilai kolom yang sama dalam sebuah tabel?

  5. Urutan subkueri MySQL