我的目标是在 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
如果有人在没有调整系统文件夹的情况下完成了它,请帮助:(