我在Postgres数据库中对数组字段执行where查询时遇到问题
在我的rails应用程序中,我有一个名为» strace -f -e trace=execve /usr/bin/python -c "import subprocess; subprocess.Popen(['ls', '/usr'])"
execve("/usr/bin/python", ["/usr/bin/python", "-c", "import subprocess; subprocess.Po"...], [/* 58 vars */]) = 0
strace: Process 8350 attached
[pid 8350] execve("/usr/local/sbin/ls", ["ls", "/usr"], [/* 58 vars */]) = -1 ENOENT (No such file or directory)
[pid 8350] execve("/usr/local/bin/ls", ["ls", "/usr"], [/* 58 vars */]) = -1 ENOENT (No such file or directory)
[pid 8350] execve("/usr/bin/ls", ["ls", "/usr"], [/* 58 vars */]) = 0
arm-none-eabi avr bin games include lib lib32 lib64 libexec local python sbin share src usr x86_64-pc-linux-gnu
[pid 8350] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=8350, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++
的表。其中一列称为People
。现在这个列包含数组值,即:
pets
我想执行一个查询,返回所有有宠物狗的人。
到目前为止,我一直在使用的解决方案看起来像
["dog", "cat", "fish"]
其中People.where("\"pets\" @> '{\"" + checkedPet + "\"}'")
是一个变量,可能是“狗”或任何其他动物。
这有效但我觉得容易受到SQL注入问题的影响吗? 是这样的吗?如果是这样,什么是更好,更安全的解决方案来避免它?
答案 0 :(得分:1)
根据ActiveRecord and PostgreSQL guide,您可以执行以下操作:
People.where('? = any("pets")', checkedPet)
或
People.where('"pets" @> ?', "{#{checkedPet}}")