【问题标题】:MySQL Query in CodeIgniter with Session IDCodeIgniter 中的 MySQL 查询与会话 ID
【发布时间】:2010-02-06 04:11:04
【问题描述】:

假设我有一个查询:

" SELECT * FROM table 
      WHERE donor_id = " .$this->session->userdata('id') ." 
      GROUP BY rating"

但是,我似乎在这里遇到了一个 mysql 语法错误,例如 $this->session->userdata('id') 给了我“25”而不是 25。这里有什么解决方法可以防止 $this->session->userdata('id') 被引用吗?

谢谢。

【问题讨论】:

    标签: php codeigniter mysql


    【解决方案1】:

    在 CI 中,我一直这样做:

    $id = intval($this->session->userdata('id'));
    $sql = "  SELECT * ".
           "    FROM table ".
           "   WHERE donor_id = {$id} ". 
           "GROUP BY rating ";
    //process $sql below
    

    创建这样的查询将使您更容易发现错误并防止 SQL 注入。当您需要将查询拆分为多行而不是使其成为一个长的多个字符串时,使用连接是为了防止实际的查询字符串变得太长。缩进 SQL 关键字是为了更容易发现逻辑和语法错误。

    【讨论】:

      【解决方案2】:

      intval($this->session->userdata('id'))

      【讨论】:

        【解决方案3】:

        假设你的意思是它返回一个字符串而不是一个整数,你总是可以尝试使用 settype 或 intval:

        $var = '2';
        settype($var, "integer");
        $var = intval($var);
        

        但是,如果您的意思是引号由于某种原因被硬编码,您可以进行字符串替换,如果您确定该值不包含引号:

        ech str_replace("'", "", "'2'"); // prints 2
        

        【讨论】:

          猜你喜欢
          • 2019-09-01
          • 1970-01-01
          • 2012-03-22
          • 2012-12-02
          • 2011-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-06
          • 1970-01-01
          相关资源
          最近更新 更多