0

Ruby メソッド内で "INSERT INTO" sqlite ステートメントをループするのに苦労しています。ご意見をお聞かせください。私のコードを以下に示します。エラー メッセージは、Ruby がメソッド内の db オブジェクトを認識していないことを示唆しているようです?? ちょっと初心者で申し訳ありませんが、私はインターネットをトロールしましたが、答えが見つかりませんでした:(

require "sqlite3"
require "nokogiri"

begin

db = SQLite3::Database.new('RM.db')
db.execute "CREATE TABLE IF NOT EXISTS Properties(address TEXT, askingPrice TEXT)"

def get_property_list(newpage, dbname)
    resultspage = Nokogiri::HTML(open(newpage))
    details = resultspage.css("div.details.clearfix")
    count_items = details.count
    puts "there are #{count_items} items on this page"

    for i in 0..count_items-1
        address = resultspage.css("span.displayaddress")[i]
        asking_price = resultspage.css("p.price")[i]

        puts address.text
        puts asking_price.text

        dbname.execute "INSERT INTO Properties VALUES(#{address}, #{asking_price})"

    end
end

get_property_list("someurl.com", db)

    rows = db.execute("select * from Properties")
    p rows

ensure
    db.close if db
end
4

1 に答える 1

0

INSERT でどちらの値も引用していません。SQLに文字列補間をまったく使用しないでください。バインドされたパラメーターを使用し、常に列名も指定してください。

dbname.execute 'INSERT INTO Properties (address, askingPrice) VALUES (?, ?)', address, asking_price

または、ステートメントを準備して、それを何度も使用することもできます。

insert = dbname.prepare('INSERT INTO Properties (address, askingPrice) VALUES (?, ?)')
for i in 0..count_items-1
  #...
  insert.execute(address, asking_price)
end
于 2013-01-18T01:33:26.437 に答える