sql >> Databasteknik >  >> RDS >> Mysql

De angivna parametrarna till Zend_Auth_Adapter_DbTable kunde inte producera en giltig SQL-sats

Det beror på MySQL-versionen enligt beskrivningen ovan. Följer MySQL-dokumentationen för version 5.5:

"Om en applikation lagrar värden från en funktion som MD5() eller SHA1() som returnerar en sträng med hexadecimala siffror, kan effektivare lagring och jämförelser erhållas genom att konvertera hex-representationen till binär med UNHEX() och lagra resultatet i en BINARY(N) kolumn. Varje par av hexadecimala siffror kräver en byte i binär form, så värdet på N beror på längden på hexsträngen. N är 16 för ett MD5()-värde och 20 för ett SHA1()-värde ."

Så istället för att nedgradera MySQL-versionen kan du göra enligt följande:

  • ändra typ av "lösenord"-kolumn från varchar(32) till binär(16)
  • lägg till MySQL-funktionen 'UNHEX()' i din MySQL-fråga i ZF-kod, till exempel:
$adapter = new Zend_Auth_Adapter_DbTable(
    $db,
    'user',
    'login',
    'password',
    'UNHEX(MD5(CONCAT(?, passwordSalt)))'
);

Det fungerar bra i mitt fall.

Redigera --Om ditt lösenordssalt också lagras i en binär kolumn (t.ex. om det också var en hex-sträng som genererades genom SHA1-funktionen) så bör den sista parametern i Zend_Auth_Adapter_DbTable vara:'UNHEX(SHA1(CONCAT(?, LOWER( HEX(salt)))))'Så, vi konverterar saltet tillbaka till en gemen hex-sträng innan vi sammanfogar med lösenordet. HEX() returnerar ditt salt med versaler så att du bara kan utelämna LOWER()-anropet om ditt salt ursprungligen var versaler innan du lagrade det med UNHEX().



  1. hur man infogar aktuellt datum i ett DATUM-fält i formatet dd/mm/åååå i oracle

  2. json-fältet på mysql where klausul

  3. Hur importerar man en csv-fil till MySQL-arbetsbänken?

  4. Ogiltig Oracle URL specificerad:OracleDataSource.makeURL