0

我的目标是在 CodeIgniter Active Record 中使用 UNION 查询。

有人建议我使用 $this->db->last_query(); 得到我想要的查询,然后将它与 UNION 结合起来。

问题是 $this->db->from(); Active Record 中 MySQL 驱动程序中使用的方法在 from 子句周围使用括号(例如:SELECT * FROM ('table') )并阻止我使用 UNION。

所以我再次检查,发现我可以修改 _from_tables 中定义的函数

system/database/drivers/mysql/mysql_driver.php

我更改了代码:

function _from_tables($tables)
{
    if ( ! is_array($tables))
    {
        $tables = array($tables);
    }
return '('.implode(', ', $tables).')';
}

对此:

function _from_tables($tables)
{
    if ( ! is_array($tables))
    {
        $tables = array($tables);
    }
return implode(', ', $tables);
}

但是如果我在这里问了一个关于如何扩展 CI mysql 驱动程序的问题(实际上,我只想用自定义的方法替换 from 方法): CodeIgniter Hooks for Active Record library并且有人建议我提出一个新问题。

因此,一位用户提议在我的文件夹中添加两个文件,我这样做了:

application/libraries/MY_DB_mysql_driver.php
application/core/MY_Loader.php

使用此方法时出现这些错误:

 A PHP Error was encountered Severity: 8192 Message: Assigning the return value of new by reference is deprecated Filename: core/MY_Loader.php Line Number: 32

所以我通过删除 & in修改了他给我的脚本(你可以在https://github.com/EllisLab/CodeIgniter/wiki/Extending-Database-Drivers看到它):

$db =& new $my_driver(get_object_vars($db)); 

我现在收到以下错误:

Fatal error: Call to undefined method MY_DB_mysql_driver::where() in \system\libraries\Session.php

如果有人在没有调整系统文件夹的情况下完成了它,请帮助:(

4

0 回答 0