1

私は sqlite3 を使用しており、http://www.pangloss.com/seidel/shake_rule.htmlのレプリケーションとして試みているコマンド ライン アプリケーションの SQL ステートメントにバインド変数を渡そうとしています。データベースの追加・削除を行う管理ユーティリティです。RubyでSQLを使用し、現在ゲームをプレイしているDM用のペンと紙のRPGユーティリティセットを構築する方法を理解しようとしています。

db.execute ("INSERT INTO insults (position, string) VALUES (?, ?);",    cmd_args[1].to_i, cmd_args[2])

db.execute("SELECT * FROM insults WHERE position = ? AND string = ?;", cmd_args[1].to_i, cmd_args[2]) do |output|
  puts output
end

最初のクエリは構文エラー「unexpected ',', expected ')'」とそれに続くエラーを引き起こしますが、この行をコメントアウトすると消えます。

後者のクエリは根本的に異なるようには見えませんが、前者をコメントアウトしてもエラーは発生しません。cmd_args 配列の値を手動で設定しても、何も出力されません。データベースには、エラーはスローされませんが、出力されない "1|test" などのいくつかのテスト要素があります。

4

1 に答える 1

4

メソッド名と左括弧の間にスペースを入れることはできません。あなたの最初のもの:

db.execute ("INSERT INTO insults (position, string) VALUES (?, ?);",    cmd_args[1].to_i, cmd_args[2])

は次のように解釈されます。

x = ("INSERT ....", cms_args[1].to_i, cmd_args[2])
db.execute x

しかし(a, b, c)、そのコンテキストでは正当なRuby構文ではなく、構文エラーがあります。

あなたの2番目のもの:

db.execute("SELECT * ...", cmd_args[1].to_i, cmd_args[2]) do |output|
  puts output
end

正常に動作するはずなので、おそらく WHERE 句が何にも一致しないため、結果が得られません。の内容を調べて、次のcmd_argsことを確認します。

  1. 迷子の空白はありません。
  2. あなたの議論は実際にはcmd_args[1..2]ではなく にありcmd_args[0..1]ます。
于 2012-08-27T05:12:45.437 に答える