Ich benutze Anorm für einfache db Rohöl, gibt es ein Problem mit Silent-Fail, wenn der Eingabeparameter single quote enthält. ZB Nachname "O'Brien" oder "O'Neill" in Benutzertabelle. Ich habe versucht, das doppelte Anführungszeichen zu verwenden, um das einfache Anführungszeichen in der Abfrage zu umgehen. Dadurch wird das stille Fehlschlagen entfernt. Der Datenbankeintrag enthält jedoch den Nachnamen "O'Brien" und "O'Neill". Was ist der richtige Weg, um ein einfaches Zitat zu vermeiden?Anorm: Escape Single-Zitat
Der Code sieht aus wie (sorry tragen Sie sich bitte mit der Formatierung Registerkarten in SO):
def insertNewUser(user: User): \/[Exception, UUID] = DB.withConnection { implicit connection =>
val updatedRowCount =
SQL"""insert into user(id, email, first_name, surname)
values (${user.id}::uuid, ${user.email}, ${sanitiseSqlQueryInput(user.firstName)},
${sanitiseSqlQueryInput(user.surname)})""".executeUpdate()
updatedRowCount match {
case 1 =>
log.debug(s"New user is successfully created [userId=${user.id.toString}]")
\/-(user.id)
case _ => -\/(new Exception(s"""Fail to create new user [id=${user.id.toString}] [email=${user.email}] [user=$user]"""))
}}
def sanitiseSqlQueryInput(s: String): String = s.replace("'", "''")
Vielen Dank im Voraus!
Meine Antwort kann begrenzt sein, da ich noch nicht kommentieren kann.