首页 > 解决方案 > Yii2:连接Oracle数据库

问题描述

我需要将 Yii2 模型连接到 Oracle 数据库,但尽管阅读了有关此主题的多个答案,但它仍无法正常工作。

我用于手动登录的 Oracle 登录凭据类似于:

在手动登录过程中,我需要选择合适的 Schema,之后我可以看到所有的表。

我不清楚如何在 oci 连接中包含这些细节。这是我没有成功的做法:

'db2' => [
    'class' => 'yii\db\Connection',
    'dsn' => 'oci:dbname=//hosturl.abc.com:1521/sidname;charset=UFT-8', 
    'username' => 'username',
    'password' => 'passABC'     
],

我收到一个错误“该表不存在:TableName”但是,即使我提供完全随机的详细信息(即错误的用户名、错误的主机、错误的密码等),我也会收到此消息)

我不清楚为什么我无法连接。也许 Oracle 数据库拒绝所有查询?我是否需要在连接凭据中包含 SID?

任何帮助表示赞赏

更新

我认为我的安装肯定存在更普遍的问题。我正在尝试如下原始连接:

$conn = oci_connect("username", "passABC", "//hosturl.abc.com/sidname");
if (!$conn) {
    print "There is a problem";
} else {
    print "Connected to Oracle!";
}

这将返回以下错误:

Call to undefined function oci_connect()

有什么建议么?这看起来像是我的 php 设置的问题?

标签: databaseoracleyii2connection

解决方案


解决了!

1) oci_connect not working: SOLVED
请参阅这篇文章了解更多详细信息如何在 RedHat / CentOS 上将 PHP 7.x 连接到 Oracle 数据库?. Yii2 需要此修复程序才能连接到 Oracle。


2) Oracle 数据库/common/config/main-local 的 Yii2 db 凭据 :

   'db' = [
     'class' => 'yii\db\Connection',
     'dsn' => 'oci:dbname=//hosturl:1521/SID;charset=UTF8',             
     'username' => 'dbusername',
     'password' => 'dbpassword',
   ]

我尝试了许多 Yii2 oci8 扩展,但没有一个对我有用。相反,oci_connect 的修复 (1) 有效,不需要额外的 Yii2 驱动程序。我能够使用标准的 'yii\db\Connection' 类。

3) 数据库模式
在 Oracle 数据库中,我们有许多模式,我不确定如何查询特定模式中的特定表。最终解决方案很简单:在每个模型中,将模式名称添加到表名称之前。例如:

class myTable extends ActiveRecord
{
    public static function tableName()
    {
        return 'schemaName.myTable';
    }

推荐阅读