Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie wendet man eine Funktion auf einen Wert einer Where-Klausel mit Knex an?

Wahrscheinlich müssen Sie whereRaw() verwenden

knex('usr_info')
  .whereRaw('login = ? AND password = PASSWORD(?)', [login, password]);

Übrigens sollten Sie die PASSWORD()-Funktion von MySQL nicht für Ihre eigene App-Authentifizierung verwenden. Diese Funktion wurde in MySQL 8.0.11 entfernt. In MySQL 5.7 ist es veraltet, und es gibt einen Hinweis:

https://dev.mysql.com/doc /refman/5.7/en/encryption-functions.html#function_password

Außerdem ist es keine gute Idee, das Klartext-Passwort an Ihre Abfrage weiterzugeben, da es möglicherweise im Klartext im Abfrageprotokoll protokolliert wird.

Stattdessen empfehle ich Ihnen, nur nach login zu suchen in Ihrer Abfrage, dann enthält das Ergebnis das in Ihrer Datenbank gespeicherte gehashte Passwort. Sie können das Passwort in Ihrem App-Code hashen und mit dem von Ihrer Abfrage zurückgegebenen Hash vergleichen.