Mysql
 sql >> база данни >  >> RDS >> Mysql

Предоставените параметри на Zend_Auth_Adapter_DbTable не успяха да създадат валиден sql израз

Зависи от версията на MySQL, както е описано по-горе. Следваща MySQL документация за версия 5.5:

„Ако приложение съхранява стойности от функция като MD5() или SHA1(), която връща низ от шестнадесетични цифри, по-ефективно съхранение и сравнения могат да бъдат получени чрез преобразуване на шестнадесетичното представяне в двоично с помощта на UNHEX() и съхраняване на резултата в колона BINARY(N). Всяка двойка шестнадесетични цифри изисква един байт в двоична форма, така че стойността на N зависи от дължината на шестнадесетичния низ. N е 16 за стойност MD5() и 20 за стойност SHA1() ."

Така че, вместо да понижавате версията на MySQL, можете да направите следното:

  • променете типа на колоната „password“ от varchar(32) на binary(16)
  • добавете функцията 'UNHEX()' MySQL към вашата MySQL заявка в ZF код, например:
$adapter = new Zend_Auth_Adapter_DbTable(
    $db,
    'user',
    'login',
    'password',
    'UNHEX(MD5(CONCAT(?, passwordSalt)))'
);

В моя случай работи добре.

Редактиране – Ако вашата парола сол също се съхранява в двоична колона (например, ако тя също е шестнадесетичен низ, генериран чрез функцията SHA1), тогава последният параметър на Zend_Auth_Adapter_DbTable трябва да бъде:'UNHEX(SHA1(CONCAT(?, LOWER( HEX(salt)))))))" И така, ние преобразуваме солта обратно в шестнадесетичен низ с малки букви, преди да се свържем с паролата. HEX() връща вашата сол с главни букви, така че можете просто да пропуснете извикването LOWER(), ако вашата сол първоначално е била главни, преди да сте я съхранили с помощта на 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. Използването на SUM, така че NULL в колоните, прави сумата NULL

  2. Не може да се конвертира varchar в datetime в MySql

  3. MySQL:Не можете да посочите целева таблица за актуализиране в клауза FROM

  4. Как да намеря връзки между таблици, които са свързани с дълги разстояния? MySQL

  5. gitlab runner:mysqld:Не мога да прочета директорията на '/etc/mysql/conf.d/'