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的模塊都有它產生這個問題的一個新選項?
今天它可能是,這是在內線/ IB的的PHP 7端口的錯誤。很少有人使用這個擴展名,所以沒有經過很好的測試。你可以在bugs.php.net上記錄一個bug嗎? – NikiC
特別是,我不認爲這行是正確的:http://lxr.php。 net/xref/PHP_MASTER/ext/interbase/interbase.c#943這個zend_list_close可能應該是一個zend_list_delete,否則它會簡單地總是破壞資源。 – NikiC
嗨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