Yii2:连接到Oracle数据库

时间:2019-06-12 21:28:56

标签: database oracle yii2 connection

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

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

  • 主机:hosturl.abc.com
  • 端口:1521
  • SID:sidname
  • 用户:用户名
  • 密码:passABC

然后,在手动登录过程中,我需要选择适当的模式,然后才能看到所有表。

我不清楚如何在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安装程序有问题?

1 个答案:

答案 0 :(得分:0)

已解决!

1)oci_connect不起作用:已解决
请参阅此帖子以获取更多详细信息How do I connect PHP 7.x to Oracle database on RedHat / CentOS?。 Yii2需要此修补程序才能连接到Oracle。

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

   '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';
    }