如何在 CodeIgniter 中执行我的 SQL 查询

Posted

技术标签:

【中文标题】如何在 CodeIgniter 中执行我的 SQL 查询【英文标题】:How to execute my SQL query in CodeIgniter 【发布时间】:2013-05-02 08:54:57 【问题描述】:

我的查询有问题,我需要连接来自不同数据库的两个表现在我的问题是如何执行我的查询。我从这里得到了我的语法格式

请先访问此链接,以便了解我的 SQL 语法为何如此http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query


我使用 CodeIgniter,这里是我的查询的一个想法:注意我选择列的方式:DATABASE_NAME.TABLE_NAME.COLUMN_NAME
$ENROLLEES = $this->load->database('ENROLLEES', TRUE);
$ACCOUNTS  = $this->load->database('ACCOUNTS', TRUE);

$SELECT    = "SELECT $ACCOUNTS.BALANCES_TABLE.IDNO, $ACCOUNTS.BALANCES_TABLE.balance";
$FROM      = "FROM $ACCOUNTS.BALANCES_TABLE";
$WHERE     = "$ACCOUNTS.BALANCES_TABLE.IDNO IN (SELECT $ENROLLEES.ENROLLEES_TABLE.IDNO FROM $ENROLLEES.ENROLLEES_TABLE)";

$SQL       = $SELECT ." ". $FROM ." ". $WHERE;

主要问题:如何执行我的查询? 如果我们在 codeIgniter 中这样做:

$ENROLLEES->query($SQL); or $ACCOUNTS->query($SQL);

如何执行我拥有多个数据库的查询?我将在这里提供什么[database]->query($SQL);

【问题讨论】:

查看这个-***.com/questions/7601028/… 你真的需要两个数据库吗,使用两个表可能更容易? @SureshKamrushi 先生,您没有得到我的问题,我知道如何在 CI 中定义数据库,我正在尝试加入来自 2 个不同数据库的 2 个表,我将在 CI 的语法 your_database->query(SQL); 中提供什么?因为我从两个数据库查询 @Stanyer 只是关注公司设计的数据库。 【参考方案1】:
    $sql="Select * from my_table where 1";    
    $query = $this->db->query($SQL);
    return $query->result_array();

【讨论】:

应该不惜一切代价避免这种情况,原因如下:1) 它绕过了 Active Record 模式 (=ARP),Code-Igniter 提供这些是“本机”查询。 2)您必须自己处理所有转义(当您使用 ARP 时,CI 会为您完成)。否则,很可能会发生 SQL 注入。 3)查询结果的缓存可能不会影响查询结果,导致SQL语句多,性能低。换句话说:将您的 SQL 查询重写为 ARP,这是 CI 2/3 的常用方法。 $this->db->query($SQL);到 $this->db->query($sql);在 PHP 中,变量名和常量名是区分大小写的【参考方案2】:

如果数据库共享服务器,则拥有对两个数据库都具有权限的登录名,并且只需运行类似于以下内容的查询:

$query = $this->db->query("
SELECT t1.*, t2.id
FROM `database1`.`table1` AS t1, `database2`.`table2` AS t2
");

否则我认为您可能必须分别运行 2 个查询并在之后修复逻辑。

【讨论】:

我的 config.php 文件中加载了 3 个数据库。我有这些$ENROLLEES = $this->load->database('ENROLLEES', TRUE); $ACCOUNTS = $this->load->database('ACCOUNTS', TRUE);,显然最后一个是default。如果我使用$this->db->query() 这意味着我使用的是默认数据库。 您只需要一个连接,即一个“加载到数据库”。如果您加载的用户在这种情况下可以访问所有给定的数据库。并且在取表时,可以指定database.table. 您的意思是先生,我不会加载其他 2 个数据库而只使用我的默认值吗? 您将拥有一个默认数据库,并且您连接的用户也将拥有PRIVELEGES 到其他2个数据库,然后您可以像我所做的那样在数据库之间嵌套查询举个例子。【参考方案3】:

我可以看到@Þaw 提到的内容:

$ENROLLEES = $this->load->database('ENROLLEES', TRUE);
$ACCOUNTS = $this->load->database('ACCOUNTS', TRUE);

CodeIgniter 支持多个数据库。您需要像上面那样将两个数据库引用保存在单独的变量中。到目前为止,你是对的/正确的。

接下来你需要按如下方式使用它们:

$ENROLLEES->query();
$ENROLLEES->result();

$ACCOUNTS->query();
$ACCOUNTS->result();

而不是使用

$this->db->query();
$this->db->result();

请参阅此内容以供参考: http://ellislab.com/codeigniter/user-guide/database/connecting.html

【讨论】:

【参考方案4】:

http://www.bsourcecode.com/codeigniter/codeigniter-select-query/

$query = $this->db->query("select * from tbl_user");

$query = $this->db->select("*");
            $this->db->from('table_name');
            $query=$this->db->get();

【讨论】:

【参考方案5】:
 return $this->db->select('(CASE 
            enter code hereWHEN orderdetails.ProductID = 0   THEN dealmaster.deal_name
            WHEN orderdetails.DealID = 0 THEN products.name
            END) as product_name')

【讨论】:

【参考方案6】:

$this->db->select('id, name, price, author, category, language, ISBN, publish_date');

       $this->db->from('tbl_books');

【讨论】:

以上是关于如何在 CodeIgniter 中执行我的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP Codeigniter 中处理 SQL 查询数据

如何在codeigniter中执行排序、搜索、分页

我应该如何在 CodeIgniter4 中组织我的文件结构以节省内存?

如何在 CodeIgniter 中使用准备好的语句

codeigniter 查询生成器和活动记录 sql 注入

codeigniter mysql中sql查询的空结果