mysql
  • sql
  • ruby-on-rails
  • ruby
  • 2013-01-16 39 views 0 likes 
    0

    我已經寫了,我用我的模型,一個SQL查詢,下面提供查找:Ruby on Rails的 - 通過SQL添加撇號

    Tag.find_by_sql(["SELECT tags.id, tags.name, count(*) AS count FROM tags 
        INNER JOIN taggings ON tags.id = taggings.tag_id 
        WHERE 
        (taggings.taggable_type = 'Discussion' AND taggings.taggable_id IN (SELECT id FROM `discussions` WHERE discussions.group_id = ?)) 
        GROUP BY tag_id ORDER BY ? LIMIT ?;", self.id, self.id, self.id, self.id, order, limit]) 
    

    這工作得很好,並翻出需要的標籤。但是標籤沒有正確排列。我在查詢有周圍的順序發言,像這樣的撇號服務器控制檯注意到:

    ORDER BY 'count desc' 
    

    當我刪除了單引號,像這樣:

    ORDER BY count desc 
    

    和手動運行查詢它拉標籤按正確的順序。有沒有辦法阻止將撇號添加到查詢中?

    乾杯

    託尼

    回答

    0

    的原因是因爲你的參數設置列名

    ORDER BY ? 
    

    你有通行證已消毒的,這就是爲什麼它成爲'count desc'值。

    您無法按設計傳遞列名稱和表名稱。唯一的方法是連接字符串中的列名稱。

    +0

    好的。謝謝,是否足夠安全地執行以下操作:ORDER BY#{order} –

    +0

    這取決於訂單來自何處。如果它是一個不可信的輸入 - 例如來自用戶或其他來源,而不是你,那麼不會。 –

    +0

    我總是將自己置於控制器中。所以我認爲這種方法很安全,但是出於好奇還有另一種方法嗎? –

    相關問題