[英]Create PostgreSQL table comment using a prepared statement
是否可以准備Postgres的“ COMMENT ON”語句?
我有一個程序,允許用戶創建表。 我想給他們選擇添加表格內容描述的選項。 由於此數據來自用戶,因此我想使用准備好的語句。
使用Ruby和“ PG ”寶石,我使用了下面設置一個Postgres連接和數據。例如:
table_name = "test_shakespeare"
description = "Shakespeare's sonnets"
con = PG.connect(
:dbname => "poefy",
:user => "poefy",
:password => "poefy"
)
sql = "CREATE TABLE #{table_name} (example TEXT);"
con.exec(sql)
這是我失敗的方法,以及它們引發的錯誤。
# ERROR: syntax error at or near "$1" (PG::SyntaxError)
sql = "COMMENT ON TABLE #{table_name} IS $1;"
con.exec(sql, [*description])
# ERROR: syntax error at or near "$1" (PG::SyntaxError)
sql = "COMMENT ON TABLE #{table_name} IS $1;"
con.prepare("comment", sql)
con.exec_prepared("comment", [*description])
# ERROR: could not determine data type of parameter $1 (PG::IndeterminateDatatype)
sql = "COMMENT ON TABLE #{table_name} IS '$1';"
con.exec(sql, [*description])
# ERROR: bind message supplies 1 parameters, but prepared statement "comment" requires 0 (PG::ProtocolViolation)
sql = "COMMENT ON TABLE #{table_name} IS '$1';"
con.prepare("comment", sql)
con.exec_prepared("comment", [*description])
似乎無法為這種類型的語句做准備,因此我應該求助於SQL字符串操作。 既然如此,最好的方法是什么? 數據不是敏感數據也不是關鍵數據,我只關心正確表示的引號和撇號。
提前致謝。
看來這是不可能的。
因此,我采用了舊的“雙引號全雙引號”方法。
safe_desc = description.gsub("'", "''")
con.exec "COMMENT ON TABLE #{table_name} IS '#{safe_desc}';"
這感覺真的很hack。 但是現在我將其標記為答案。
如果有更安全的方法,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.