sql >> Database teknologi >  >> RDS >> Mysql

De leverede parametre til Zend_Auth_Adapter_DbTable kunne ikke producere en gyldig sql-sætning

Det afhænger af MySQL-versionen som beskrevet ovenfor. Følgende MySQL-dokumentation til version 5.5:

"Hvis en applikation gemmer værdier fra en funktion såsom MD5() eller SHA1(), der returnerer en streng af hex-cifre, kan mere effektiv lagring og sammenligninger opnås ved at konvertere hex-repræsentationen til binær ved hjælp af UNHEX() og gemme resultatet i en BINÆR(N) kolonne. Hvert par af hex-cifre kræver én byte i binær form, så værdien af ​​N afhænger af længden af ​​hex-strengen. N er 16 for en MD5()-værdi og 20 for en SHA1()-værdi ."

Så i stedet for at nedgradere MySQL-versionen, kan du gøre som følger:

  • skift type 'adgangskode'-kolonne fra varchar(32) til binær(16)
  • tilføj 'UNHEX()' MySQL-funktion til din MySQL-forespørgsel i ZF-kode, for eksempel:
$adapter = new Zend_Auth_Adapter_DbTable(
    $db,
    'user',
    'login',
    'password',
    'UNHEX(MD5(CONCAT(?, passwordSalt)))'
);

Det fungerer godt i mit tilfælde.

Rediger --Hvis dit password salt også er gemt i en binær kolonne (f.eks. hvis det også var en hex-streng genereret gennem SHA1-funktionen), så skal den sidste parameter i Zend_Auth_Adapter_DbTable være:'UNHEX(SHA1(CONCAT(?, LOWER( HEX(salt)))))'Så vi konverterer saltet tilbage til en hex-streng med små bogstaver, før vi sammenkæder med adgangskoden. HEX() returnerer dit salt med store bogstaver, så du bare kan udelade LOWER()-kaldet, hvis dit salt oprindeligt var stort, før du gemte det ved hjælp af UNHEX().



  1. Vis resultater, der er tættest på den aktuelle dato og tid (MySQL &PHP)

  2. Tæl hvor mange rækker der har samme værdi

  3. Hvordan tilføjer man et specifikt antal tomme rækker i sqlite?

  4. Sådan fungerer TRIM_ORACLE() i MariaDB