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

20

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

请先访问此链接,以便您能够理解为什么我的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); ?


请查看此链接 - https://dev59.com/UWsz5IYBdhLWcg3w3r4K - Suresh Kamrushi
你真的需要两个数据库吗?使用两个表可能会更容易。 - Ryan
先生 @SureshKamrushi,您没有理解我的问题,我知道如何在CI中定义两个数据库,但我正在尝试连接来自两个不同数据库的2个表,那么在CI的语法your_database->query(SQL);中我应该提供什么?因为我要从两个数据库查询。 - Þaw
@Stanyer 只是按照公司设计的数据库进行操作。 - Þaw
7个回答

43
    $sql="Select * from my_table where 1";    
    $query = $this->db->query($sql);
    return $query->result_array();

3
因为以下几个原因,务必避免使用这种方法:1)绕过Code-Igniter提供的“本地”查询,从而绕开了Active Record Pattern (=ARP)。2)你必须自己处理所有的转义(当你使用ARP时,CI会为你处理)。如果你不这么做,很可能会发生SQL注入。3)对查询结果进行缓存可能不会影响它们,导致更多的SQL语句和较差的性能。换句话说:将你的SQL查询重写成CI 2/3中常见的ARP方式。 - Roland
1
在PHP中,变量和常量名是区分大小写的。将$this->db->query($SQL);更改为$this->this->db->query($sql);。 - H.M Maruf
这个回答似乎巧妙地回避了被问问题的背景,实际任务是查询两个不同的数据库。 - undefined

13

如果数据库共享服务器,并且有一个登录用户拥有两个数据库的权限,那么只需要运行类似以下查询:

If the databases share server, have a login that has priveleges to both of the databases, and simply have a query run similiar to:


$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(),那就意味着我正在使用默认数据库。 - Þaw
1
你只需要一个连接,也就是"加载到数据库"。如果用户在这种情况下可以访问所有给定的数据库,那么您加载的用户就具有这种访问权限。当获取表时,您可以指定“数据库”。“表”。 - Robin Castlin
先生,您的意思是我不需要加载我的另外两个数据库,只使用默认的数据库吗? - Þaw
您将拥有一个默认的数据库,连接的用户也将具有对其他两个数据库的“权限”,然后您可以像我在给定的示例中所做的那样,在数据库之间嵌套查询。 - Robin Castlin

3

1
这个回答似乎巧妙地回避了被问问题的背景,实际任务是查询两个不同的数据库。 - undefined

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


0

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

这段代码是用于数据库查询的,它会选择出id、名称、价格、作者、分类、语言、ISBN和出版日期等字段。

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

0
 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')

-1
Select Query:
$this->db->select('column1, column2');
$this->db->from('your_table');
$query = $this->db->get();
Insert Query:
$data = array('column1' => 'value1','column2' => 'value2');
$this->db->insert('your_table', $data);
Update Query:
$data = array('column1' => 'new_value1','column2' => 'new_value2');
$this->db->where('your_condition');
$this->db->update('your_table', $data);
Delete Query:
$this->db->where('your_condition');
$this->db->delete('your_table');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接