我有以下选择查询,我将传递给数据库以获取结果,
sql = "select * from movies where title = #{movie_title};"
movie_title
包含的值有时可以包含单引号和其他需要转义的字符。我遇到过美元引用的字符串,它在INSERT
语句中使用时运行良好,但SELECT
行为不一样,如果我使用$$#{movie_title}$$
这样就不会转换为movie_title
内的值。对此有什么解决方案吗?
我使用的是postgres 9.5.0,我使用ruby进行编程。
答案 0 :(得分:2)
糟糕的主意。不要这样做,因为你使你的代码容易受到SQL注入攻击,并且还会让你的生活更加艰难。阅读有关准备好的SQL语句,SQL注入等的更多信息。
简而言之,除非您使用某些ORM,否则您应该执行以下操作:
E = [5,200]; Selected edge values
X = imread('LENNA128.bmp');
N = length(X);
Y = false(N+2);
for k = 1:numel(E);
Y(2:end-1,2:end-1) = X==E(k);
Z = Y(1:end-2,2:end-1) | Y(3:end,2:end-1) | Y(2:end-1,3:end) | Y(2:end-1,1:end-2);
X(Z) = round((X(end-3,3:end-2) + X(end-3,4:end-1))/2);
end
(取自http://zetcode.com/db/postgresqlruby/)
的例子编辑:您不需要使用预准备语句,您也可以使用DB lib提供正确参数绑定的方法:
#!/usr/bin/ruby
require 'pg'
if ARGV.length != 1 then
puts "Usage: prepared_statement.rb rowId"
exit
end
rowId = ARGV[0]
begin
con = PG.connect :dbname => 'testdb', :user => 'janbodnar'
con.prepare 'stm1', "SELECT * FROM Cars WHERE Id=$1"
rs = con.exec_prepared 'stm1', [rowId]
puts rs.values
rescue PG::Error => e
puts e.message
ensure
rs.clear if rs
con.close if con
end
的文档