2016-05-05 6 views
2

Es scheint, dass PHP 7 ein wenig die Art geändert hat, mit dem Interbase-Modul zu arbeiten.Mehrere Verbindungen zu Interbase mit PHP 7.0

Der gleiche Code auf PHP 5.6 funktioniert einwandfrei.

Wenn Sie einen offenen Link zu einer Interbase/Firebird-Datenbank haben und Sie öffnen einen anderen ein zu der gleichen Datenbank der erste Link ist es geschlossen.

Ein Beispiel-Code kann sein:

$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 definiert Variablen mit dem Benutzer, Passwort, ..... der Datenbank.

Das Ergebnis ist es das gleiche, wenn statt ibase_pconnect wir ibase_connect

schreiben Wenn Sie diesen Code ausführen Sie nicht nichts bekommen, und auf der Seite melden Sie sich so etwas wie sehen:

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 .... 

Wenn wir die Zeile mit dem $ conx2 entfernen, wird alles perfekt funktionieren.

Auf meinem php.ini Ich habe diese (genau das gleiche, als auf 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 

Interbase-Modul für php7 hat eine neue Option, die es dieses Problem ist zu erzeugen?

+0

nicht fixierten ist sein Es ist gut, dass dies ein Fehler in dem PHP-7-Port von ext/ınterbase. Es gibt sehr wenige Leute, die diese Erweiterung verwenden, also nicht gerade gut getestet.Sie ​​können einen Fehler auf bugs.php.net protokollieren? – NikiC

+0

Insbesondere glaube ich nicht, dass diese Zeile korrekt ist: http: //lxr.php. net/xref/PHP_MASTER/ext/interbase/interbase.C# 943 Dieser zend_list_close sollte wahrscheinlich ein zend_list_delete sein, sonst wird es die Ressource einfach immer zerstören – NikiC

+0

Hi NIkiC, ich benutze Ubuntu 16.04 LTS, das PHP 7.0.4 verwendet. Auf bugs.php.net sagt, wenn ich nicht die letzte Version benutze (7.0.7 sollte ich upgraden bevor ich einen Bug poste). Ich habe am selben Tag einen Bug an Ubuntu Bugtracker geschickt, den ich hier gepostet habe: https://bugs.launchpad.net/ubuntu/+source/php7.0/+bug/1578600 – NetVicious

Antwort