PHP 連線 Oracle

sunrise丶發表於2019-09-05

由於專案的資料庫需要用客戶購買的Oracle資料庫,所以需要php安裝oci擴充套件。

php : 7.2

系統: windows10

oracle: 11gR2

由於php的oci8擴充套件還是需要使用到oracle的一些包,所以先下載這一些。

PHP連線Oracle

下載完成後解壓縮這個壓縮包,並且將這個包的路徑新增到PATH中。

PHP連線Oracle

windows可以直接到這個網址上下載相應的dll,pecl oci8

如果是安裝了pecl的話,可以直接執行 pecl install oci8

下載完成後放到php的ext目錄下,並且編輯php.ini檔案,新增extension=php_oci8.dll

這樣就完成了php與oracle的配置了。

Laravel預設支援的資料庫不包含oracle,可以使用 yajra/laravel-oci8這一個包來讓Laravel支援oracle

composer require yajra/laravel-oci8

由於這個包已經支援Laravel的自動載入,也就不需要自己手動去註冊了

    "extra": {
        "branch-alias": {
          "dev-master": "5.6-dev"
        },
        "laravel": {
            "providers": [
                "Yajra\\Oci8\\Oci8ServiceProvider"
            ]
        }
    },

這樣就可以使用php連線到oracle了。

我們在使用migration來管理表格的時候,一般情況下會對每一個表都要有註釋(為了別人能看得懂。。。)。然而這個包有一個bug,就是對於表格的註釋缺少了字首。

表格的註釋是成員變數而不是方法噢。

   /**
     * Run the comment on table statement.
     * Comment set by $table->comment = 'comment';.
     *
     * @param \Yajra\Oci8\Schema\OracleBlueprint $blueprint
     */
    private function commentTable(OracleBlueprint $blueprint)
    {
        $table = $this->wrapValue($blueprint->getTable());

        if ($blueprint->comment != null) {
            $this->connection->statement("comment on table {$table} is '{$blueprint->comment}'");
        }
    }

這一段程式碼在/vendor/yajar/laravel-oci8/src/Oci8/Schema/Comment.php 中第40行。

這裡少了對錶字首的引用,導致我們在migrate的時候生成的sql是缺少了表字首的,所以在這裡新增一個表字首上去解決這個問題

    /**
     * Run the comment on table statement.
     * Comment set by $table->comment = 'comment';.
     *
     * @param \Yajra\Oci8\Schema\OracleBlueprint $blueprint
     */
    private function commentTable(OracleBlueprint $blueprint)
    {
        $table = $this->wrapValue($blueprint->getTable());

        if ($blueprint->comment != null) {
            $this->connection->statement("comment on table {$this->connection->getTablePrefix()}{$table} is '{$blueprint->comment}'");
        }
    }

相關文章