You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby的SQL查询中使用LIKE?查询起始字符时出错

在Ruby的SQL查询中正确使用LIKE操作符
  • 问题根源:你直接通过字符串插值拼接SQL语句,不仅存在SQL注入风险,还可能因变量中的特殊字符(比如单引号)触发语法错误,这就是你当前出错的原因。

  • 正确方案:使用参数化查询
    所有主流Ruby数据库库都支持参数化查询,通过占位符传递参数,由数据库自动处理转义和拼接逻辑,既安全又能避免语法问题。以下是不同库的实现示例:

    1. ActiveRecord(Rails常用)
      利用where方法结合占位符构建查询:

      results = SapSid.joins(instance: :vm)
                      .where("sap_sid.name LIKE ? AND sap_vm.customer_id = ?", "#{tipo}%", cliente_id)
                      .pluck(:sid)
      results.each do |item|
        # 你的处理逻辑
      end
      

      更简洁的写法:

      results = SapSid.joins(instance: :vm)
                      .where("sap_sid.name LIKE :prefix", prefix: "#{tipo}%")
                      .where(sap_vm: { customer_id: cliente_id })
                      .pluck(:sid)
      
    2. PG gem(原生PostgreSQL连接)
      使用$1、$2作为占位符:

      conn = PG.connect(dbname: '你的数据库名称')
      query = <<~SQL
        SELECT sid.sid 
        FROM sap_vm vm 
        INNER JOIN sap_instance instance 
             ON vm.id = instance.vm_id
        INNER JOIN sap_sid sid 
             ON sid.id = instance.sid_id
        WHERE sid.name LIKE $1
          AND vm.customer_id = $2
      SQL
      conn.exec_params(query, ["#{tipo}%", cliente_id]).each do |item|
        # 你的处理逻辑
      end
      
    3. mysql2 gem(原生MySQL连接)
      使用?作为占位符:

      client = Mysql2::Client.new(host: 'localhost', username: '用户名', database: '你的数据库名称')
      query = <<~SQL
        SELECT sid.sid 
        FROM sap_vm vm 
        INNER JOIN sap_instance instance 
             ON vm.id = instance.vm_id
        INNER JOIN sap_sid sid 
             ON sid.id = instance.sid_id
        WHERE sid.name LIKE ?
          AND vm.customer_id = ?
      SQL
      client.query(query, ["#{tipo}%", cliente_id]).each do |item|
        # 你的处理逻辑
      end
      
  • 避免直接拼接字符串的原因

    • 存在SQL注入风险:恶意用户可构造变量值执行任意SQL,破坏数据或窃取信息。
    • 易触发语法错误:当变量包含单引号等特殊字符时,拼接后的SQL会直接失效,比如tipo值为D'EV时,会生成LIKE 'D'EV%'的错误语句。

内容的提问来源于stack exchange,提问作者miguel lara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:35:26