2013-01-21 106 views
0

我一直在使用MySQL作爲數據庫的Ruby Web應用程序。我從朋友那裏聽說mysql寶石在存儲過程中效果不好,所以我決定使用mysql2寶石和seqel寶石。在Ruby中訪問MySQL存儲過程

我在MySQL中有一個名爲AddUser(Username, Password)的存儲過程。它在MySQL中正常工作。我想出於安全原因使用寶石來訪問它。

sqeuel doc here只能真正涵蓋如何訪問使用sequel寶石製作的數據庫。我的代碼的第一稿看起來是這樣,但不實際運行過程

# Connect to the database 
db = Sequel.mysql2(
    :host => '127.0.0.1', 
    :database => database, 
    :username => username, 
    :password => password) 

# Call the sproc 
db["User"] 
db.call_sproc(:insert, "AddUser", [name, pass]) 

的錯誤信息是:

Sequel::DatabaseError

Mysql2::Error: Query was empty

+1

它應該是'prepare_sproc'和'call_sproc'嗎? –

+0

謝謝,這似乎更正確。不過,我仍然遇到麻煩。 –

回答

1

我不確定是否PreparedStatement實際上能夠調用存儲過程。當然,在JDBC中你必須使用CallableStatement來做到這一點。

既然你使用續集,你有看看Sequel :: DataSet :: StoredProcedures(http://sequel.rubyforge.org/rdoc-adapters/classes/Sequel/Dataset/StoredProcedures.html)?

+0

謝謝,這絕對是一個更好的地方看。儘管如此,我仍然遇到問題,您是否介意查看我的編輯? –

+0

此主題[http://osdir.com/ml/sequel-talk/2010-06/msg00001.html]可能有用。我只是用Sequel作爲ActiveRecord 3的替代品,而不是在Ruby中進行任何SP工作。您可能需要手動建立存儲的proc調用並手動執行它們。 – mcfinnigan