0

以前は Ruby コードに sqlite3 を使用していましたが、次のコードでは問題なく動作しました

def existsCheck( db, id )
    temp = db.exec( 'SELECT 1 WHERE EXISTS(
        SELECT 1
        FROM Products
        WHERE promoID = ?
    ) ', [id] ).length > 0
end


def writeDB( db, product )
    db.exec( 'INSERT INTO Products ( promoID, name, price, shipping, condition, grade, included, not_included, image, time_added )
                        VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [product.promoID, product.name, product.price, product.shipping, product.condition, product.grade, product.included, product.notIncluded, product.image, product.time] )
end

Postgresql は「?」の考え方をサポートしていませんか? または私は何か間違ったことをしていますか?

4

1 に答える 1

0

細かいPG::Connectionマニュアルから:

- (PG::Result) exec(sql[, params, result_format ])
- (Object) exec(sql[, params, result_format ]) {|pg_result| ... }
[...]
PostgreSQLバインドパラメータは、SQLクエリ内で、、、など$1として$1表されます。$2params配列の0番目の要素はにバインドされ$1、1番目の要素はにバインドされます。$2などnilは。として扱われNULLます。

したがって、PostgreSQLで番号付きプレースホルダーを使用する必要があります。

def existsCheck( db, id )
    temp = db.exec( 'SELECT 1 WHERE EXISTS(
        SELECT 1
        FROM Products
        WHERE promoID = $1
    ) ', [id] ).to_a.length > 0
    # You'll also need to .to_a the result before you can
    # treat it as an array...
end
于 2013-01-21T01:52:53.970 に答える