0
シンプルなdbの原油に暴力を使用していますが、入力パラメータに一重引用符が含まれているとサイレントエラーの問題があります。例:ユーザーテーブルのO'BrienまたはO'Neillの姓私は二重引用符を使用してクエリ内の一重引用符をエスケープしようとしましたが、これはサイレントフェイルを削除しますが、データベースエントリには姓 "O''Brien"と "O''Neill"が含まれています。一重引用符を逃れるための正しい方法は何ですか?Anorm:エスケープシングルクォート
コードが(すみません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("'", "''")
感謝を事前に!
まだコメントできないので、私の反応が制限されることがあります。