2012-05-31 9 views
10

का उपयोग करके तैयार किए गए INSERT कथन का उदाहरण कुछ आधे दिन के लिए कुछ googling था और मुझे पीजी मणि (postgresql ruby ​​मणि) का उपयोग कर तैयार INSERT कथन का कोई नमूना नहीं मिल रहा है।ruby ​​pg gem

मैं (मणि डॉक्स देखने के बाद) इस कोशिश की:

def test2 
    conn = PG.connect(dbname: 'db1') 
    conn.prepare("statement1", 'INSERT INTO table1 (id, name, profile) VALUES (?, ?, ?)') 
end 

लेकिन मैं निम्नलिखित त्रुटि मिलती है:

pgtest.rb:19:in `prepare': ERROR: syntax error at or near "," (PG::Error) 
LINE 1: INSERT INTO table1 (id, name, profile) VALUES (?, ?, ?) 
                 ^
from pgtest.rb:19:in `test2' 
from pgtest.rb:25:in `<main>' 
+0

आप पोस्ट कर सकते हैं पूरी फ़ाइल कृपया? यह मदद कर सकता है, क्योंकि यह एक वाक्यविन्यास त्रुटि है - यह – Jwosty

+0

@Jwosty से आगे शुरू हो सकता है: 'त्रुटि: ... (पीजी :: त्रुटि)' इंगित करता है कि रूबी के बजाय त्रुटि 'pg' से आ रही है। –

+0

ओह, यह समझ में आता है ... ऐसा लगता है कि यह ओपी के हिस्से पर एक वाक्यविन्यास गलती थी। मुझे एहसास नहीं हुआ कि मणि त्रुटि फेंक रहा था (मैंने पहले कभी इसका इस्तेमाल नहीं किया है); धन्यवाद! – Jwosty

उत्तर

27

pg मणि, आप गिने प्लेसहोल्डर ($1 का उपयोग करना चाहता $2 , ...) स्थितित्मक प्लेसहोल्डर्स (?) के बजाय:

conn = PG.connect(:dbname => 'db1') 
conn.prepare('statement1', 'insert into table1 (id, name, profile) values ($1, $2, $3)') 
conn.exec_prepared('statement1', [ 11, 'J.R. "Bob" Dobbs', 'Too much is always better than not enough.' ]) 

fine manual यह कहना है करने के लिए:

- (PGresult) prepare(stmt_name, sql[, param_types ])
[...]
PostgreSQL bind parameters are represented as $1, $1, $2, etc., inside the SQL query.

और फिर exec_prepared के लिए:

PostgreSQL bind parameters are represented as $1, $1, $2, etc., inside the SQL query. The 0th element of the params array is bound to $1, the 1st element is bound to $2, etc.

+1

धन्यवाद! वह चाल है! दोह, मुझे नहीं पता कि मुझे यह कैसे याद आया! – iphone007

+0

इसे निष्पादित करने से पहले कथन तैयार करने के लिए यह कब योग्य है? –

+1

@ मार्टिन: यदि आप अलग-अलग मानों के साथ कई बार एक ही कथन निष्पादित करना चाहते हैं। कुछ डीबी इंटरफेस को प्लेसहोल्डर्स का उपयोग करने के लिए स्पष्ट तैयार कथन उपयोग की आवश्यकता होती है लेकिन 'पीजी' मणि आपको प्लेसहोल्डर का उपयोग ['exec'] (http://rubydoc.info/gems/pg/PG/Connection#exec-instance_method) के साथ करने देता है। । –