2016-05-05 67 views
2

似乎PHP 7改變了一點與Interbase模塊一起工作的方式。通過php 7.0連接到Interbase的多個連接

PHP 5.6上的相同代碼完美無瑕。

如果您有一個到Interbase/Firebird數據庫的開放鏈接,並且您打開另一個一個到同一個數據庫,它將關閉第一個鏈接。的代碼

一個例子可以是:

與用戶,密碼
$conx = ibase_pconnect(DB_HOST . ":" . DB_NAME,DB_USER,DB_PWD,DB_CHARACTER) or die(ibase_errcode() . ' ' . ibase_errmsg()); 

$conx2 = ibase_pconnect(DB_HOST . ":" . DB_NAME,DB_USER,DB_PWD,DB_CHARACTER) or die(ibase_errcode() . ' ' . ibase_errmsg()); 

$sql = 'SELECT something from somewhere'; 

$query = ibase_query($conx, $sql); 

while ($row = ibase_fetch_assoc($query)) { 
    echo $row['something']; 
} 

DB_xxx是定義的變量,.....數據庫。

是相同的,如果不是ibase_pconnect我們寫ibase_connect

如果您運行的代碼,你不會得到什麼,以及在頁面上登錄你會看到類似的結果:

supplied resource is not a valid Firebird/InterBase link resource in .... 

ibase_fetch_assoc(): Dynamic SQL Error SQL error code = -504 Invalid cursor reference Cursor is not open .... 

如果我們刪除$ conx2行,所有行都會完美。

在我的php.ini我有這樣的(比PHP 5.6完全一樣):

ibase.allow_persistent = 1 

; Maximum number of persistent links. -1 means no limit. 
ibase.max_persistent = -1 

; Maximum number of links (persistent + non-persistent). -1 means no limit. 
ibase.max_links = -1 

爲PHP7 Interbase的模塊都有它產生這個問題的一個新選項?

+0

今天它可能是,這是在內線/ IB的的PHP 7端口的錯誤。很少有人使用這個擴展名,所以沒有經過很好的測試。你可以在bugs.php.net上記錄一個bug嗎? – NikiC

+0

特別是,我不認爲這行是正確的:http://lxr.php。 net/xref/PHP_MASTER/ext/interbase/interbase.c#943這個zend_list_close可能應該是一個zend_list_delete,否則它會簡單地總是破壞資源。 – NikiC

+0

嗨NIkiC,我使用的是使用PHP 7.0.4的ubuntu 16.04 LTS。在bugs.php.net上說如果我沒有使用最新版本(7.0.7我應該在發佈bug之前升級)。我在Ubuntu發佈bug的同一天發佈了一個bug:https://bugs.launchpad.net/ubuntu/+source/php7.0/+bug/1578600 – NetVicious

回答