【问题标题】:Convert following MySQL query to Codeigniter equivalent将以下 MySQL 查询转换为 Codeigniter 等效项
【发布时间】:2016-01-03 18:55:38
【问题描述】:

我是 CodeIgniter 的新手,我在将 MySQL 查询转换为 CodeIgniter 时遇到了一些问题。我想用另一个关系表的条件更新一个表中的记录。

以下是我的 MySQL 查询

UPDATE `user` SET `securitytoken` = '71b9b5bc1094ee6eaeae8253e787d654'
WHERE `profileid` IN (SELECT pid FROM `profile` WHERE `email` = 'username@mail.com')    

这在 phpMyAdmin 中运行良好,但我希望将其转换为 codeigniter 更新查询。谁能帮我转换一下。

我在本地 WAMP 服务器中使用 CI v3.0.3。

提前致谢

【问题讨论】:

    标签: php mysql database codeigniter codeigniter-3


    【解决方案1】:

    我要做的是按原样对您的查询进行编码

    $query = $this->db->query('YOUR QUERY HERE');
    

    并使用转义功能来处理您的一两个输入值。

    注意查询绑定,可能对您的情况有用。

    见:http://www.codeigniter.com/user_guide/database/queries.html

    我不会尝试使用 Active Records,你的 SQL 有点太复杂了。

    【讨论】:

    • Audet,谢谢它对我有用,但想了解 Active Records。 :)
    • 在 CodeIgniter V2 文档中,查询构建类被称为 Active Records,而在 V3 中,它被称为 Query Builder 类。
    【解决方案2】:

    试试这个

    $query = $this->db->query("UPDATE `user` SET `securitytoken` = '71b9b5bc1094ee6eaeae8253e787d654'
    WHERE `profileid` IN (SELECT pid FROM `profile` WHERE `email` = 'username@mail.com')");
    $result = $query->result_array();
    return $result;
    

    【讨论】:

      【解决方案3】:
      $query=$this->db->query("SELECT pid FROM `profile` WHERE `email` = 'username@mail.com'")->row_array();
      
      $this->db->set(`securitytoken`,'71b9b5bc1094ee6eaeae8253e787d654');
      $this->db->where_in(`profileid`,$query['pid']);
      $this->db->update('user');
      
      //echo $this->db->last_query();
      //exit;
      

      试试这个...!

      【讨论】:

      • 我不确定这是否可行。根据 CodeIgniter 文档,where_in 的第二个参数需要是一个值或数组,codeigniter.com/user_guide/database/… 在您的方法中,您需要先运行子查询,获取值,然后运行主查询,即一个非常好的方法,因为(虽然它看起来很笨重)它使用 CI 数据库类并且更容易维护。
      • 我认为它会......好的,我明白了。谢谢(你的)信息。 @MarcAudet
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      相关资源
      最近更新 更多