- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过 AJAX 为搜索栏提供动力,该搜索栏传递与数据库列相关的选定过滤器(单选按钮)和搜索栏中输入的任何内容的搜索字符串。我使用的 scala/play/anorm 代码是这样的:
def searchDB(searchString: String, filter: String): List[DatabaseResult] = {
DB.withConnection { implicit c =>
SQL(
"""
SELECT name, email, emailsecondary, picture, linkedin, title, company, companylink, companydesc, location, github, stackoverflow, twitter, blog
FROM mailinglistperson
WHERE {filter} LIKE '%{searchString}%'
""").on(
'filter -> filter,
'searchString -> searchString
).as(databaseResultParser.*)
}
当我使用与上述异常代码同构的 psql
在数据库 (PostgreSQL) 上运行查询时,它返回 2 个结果,即:
select id, name, email from mailinglistperson where company like '%kixer%';
但是当传递完全相同的值时,异常代码返回 0 个结果(我已经通过 println 验证了这些值)
编辑:当我将异常代码切换为使用字符串插值时,我得到:
[error] - play.core.server.netty.PlayDefaultUpstreamHandler - Cannot invoke the action
java.lang.RuntimeException: No parameter value for placeholder: 3
EDIT2:我还尝试将“%...%”与 searchString 一起传递到 LIKE 中,但仍然得到 0 个结果。
最佳答案
有两个问题——列名和过滤值
至于过滤值:您必须在 SQL 命令中省略单个标记,并且您应该在参数中传递占位符“%”。如果是字符串,则会自动处理刻度。
至于列名:它就像一个字符串参数,因此也会自动处理报价:
[debug] c.j.b.PreparedStatementHandle - select ... from ... where 'filter' like '%aaa%'
一种解决方案:使用普通字符串插值 s"""... $filter ..."""
。
一起:
SQL(
s"""
SELECT name, email, ...
FROM mailinglistperson
WHERE $filter LIKE {searchString}
""").on(
'searchString -> "%" + searchString + "%"
).as(databaseResultParser.*)
但这之前应该伴随着检查,比如
val validColumns = List("name", "email")
if (validColumns.contains(filter)) == false) {
throw new IllegalArgumentException("...")
}
防止 SQL 注入(inject)。
更新
正如 cchantep 所指出的:如果使用 Anorm >= 2.4,则可以使用混合插值(列名和值):
SQL"... WHERE #$filter LIKE $searchString"
在这种情况下,它对 SQL 注入(inject)是部分安全的:仅覆盖值,不覆盖列名。
更新 2
关于记录 SQL 语句,请参阅 Where to see the logged sql statements in play2?
但是当您使用 PostgreSQL 时,我建议使用权威来源:PostgreSQL 日志:在 postgresql.conf
中:
log_statement = 'all' # none, ddl, mod, all
然后您将在 PostgreSQL 日志文件中看到如下内容:
LOG: select * from test50 where name like $1
DETAIL: Parameter: $1 = '%aaa'
关于postgresql - Anorm 返回 0 个结果,而 psql 返回 2 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32708317/
我的数据库有 很多 table (比如 400+),我只记得我要找的那个人的名字的一部分。 我知道 \d将显示所有表格,但这太多了。是否有一些命令可以列出名称与给定正则表达式匹配的所有表? 谢谢 最佳
有没有办法使用 psql 命令行界面显示表中的所有内容? 我可以使用\list显示所有数据库,\d显示所有表格,但如何显示表格中的所有数据? 最佳答案 较新版本:(从 8.4 - mentioned
我有一个奇怪的情况,which psql 结果是 /usr/local/php5/bin/psql。 我无法退出它,而且它是一个可执行文件。我在网上阅读的所有内容都不适用。 我试过这样做:pg_ctl
刚刚创建了一个登录角色,随后创建了一个由登录角色拥有的数据库(两者都具有相同的名称“。我指定了一个密码。键入 psql fplanner 并立即被带到没有它的控制台从密码询问。我登录到我的计算机的管理
使用 psql,我想格式化 bool 值以显示为 TRUE 和 FALSE 而不是 t和 f 默认情况下,因为我发现后者很难相互区分。 我可以通过在我的 ~/.psqlrc 中设置以下内容来更改 nu
我正在构建一个从 friend 那里克隆的 Rails 应用程序。我正在使用 Ubuntu 13.10,rails 3.2.14。我正在使用 postgresql 数据库,当我尝试运行 rake db
我对 psql 完全陌生,对某些术语不是特别熟悉。我正在按照此处链接中有关模仿的 ETL 流程的说明进行操作:https://github.com/chichukw/mimic-omop/blob/m
我正在尝试学习如何将 prisma 与 psql 数据库一起使用。 我在使用 id 是 uuid 字符串的引用时遇到问题。 我有一个用户模型: model User { id Str
lecture3-# SELECT * FROM flights; ERROR: syntax error at or near "psql" LINE 1: psql 这是代码和错误。我在 Env
我正在尝试执行两个 sql 命令(创建一个新的架构和表),如果执行失败,它将启用两个命令的回滚。我要连接的数据库是 AWS Redshift。 create schema if not exists
我正在尝试将新终端 Postgres shell (psql) 添加到 Windows 终端。我想将其添加到设置中的配置文件列表中。 这是 Windows 终端。 在设置文件中,我们可以添加配置文件列
我在使用 PostgreSQL 时遇到问题。我最近在 ubuntu 20.04 中安装了这个版本 (13+223.pgdg20.04+1) 的 postgresql 包。 我正在尝试运行 psql命令
我将我的 postgres 版本从 9.2.24 切换到 9.6,因为我需要 jsonb 兼容性以及其他最新功能。我在 centos 7 上运行虚拟机。 我决定删除所有现有的 postgres 实例(
大家好,正如标题所说,我在尝试从转储文件导入“创建”新数据库时遇到问题。当我尝试运行 sql 查询时 - 我收到有关 的错误 ' COPY ' .当你通过 psql 控制台运行时,我得到 wrong
每当我尝试以用户 postgres 身份运行 psql 命令时,我都会收到此错误。 psql: 无法连接到服务器: 没有那个文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/var/run
heroku pg:psql 命令在尝试连接到数据库时抛出错误。 (venv) PS C:\Users\Mevin\Desktop\poster> heroku pg:psql ---> Connec
我是 Postgres 和 Bash 的新手,所以我不确定有什么区别。 我正在尝试在 bash 脚本中自动更新 Postgres 中的表。我有 .sql 文件并创建了 .pgpass 600 的文件。
我正在使用 Windows 10 并为其安装了 Psql (9.6.4)。安装时,它要求我输入 super 用户“postgres”的密码,我输入的是“asdfasdf”。所以安装后,我用 psql
更新:有人在下面提到这是重复的:https://dba.stackexchange.com/questions/269473/what-does-psql-usr-pgsql-11-lib-libpq
在 postgres.app 安装和运行时出现问题,但是当我输入 哪个psql然后我收到“/usr/bin/psql”而不是 postgres.app 期望的正确路径。当我回应我的 PATH 时,我得
我是一名优秀的程序员,十分优秀!