PDA

View Full Version : odbc_connect() mit PHP auf DB2



Seiten : [1] 2

watchdogg
18-02-10, 10:56
Hallo,

zu diesem Thema gibt es zwar schon viele Artikel, aber ich muss direkt nochmal vom Urschleim anfangen.
Ich will mit PHP auf die DB2 unserer iSeries zugreifen, der ODBC Treiber ist installiert.
Der System-DSN "AS400" existiert ebenfalls und die Userdaten stimmen auch.

Ich hab mal eine einfache Verbindung erstellt:


$con = odbc_connect('AS400', 'quser', 'qpwd', SQL_CUR_USE_ODBC) or die ("Verbindung fehlgeschlagen!");
if($con)
{
echo "Verbindung erfolgreich!!!";
odbc_close_all();
}
Gestern kam es schonmal zur Meldung "Verbindung erfolgreich". Ich hatte jedoch die Funktion odbc_close_all() vergessen.
Nach diesem erfolgreichen Versuch habe ich es kein weiteres Mal hinbekommen.
Der Browser rödelt ewig lange rum und es kommt keine Fehlermeldung und kein Timeout.

Liegt es etwa an dem vergessenen Funktionsaufruf?
Wurde die alte Verbindung nicht getrennt (kann ich mir nicht vorstellen)?

MfG watchdogg

andreaspr@aon.at
18-02-10, 11:20
hi,

prüfe mal ob der lokale port as-database aktiv bzw. empfangsbereit ist.


Verbindungs-ID:
Name des fernen Hosts . . . . . . . . . . . . :
Ferne Internet-Adresse . . . . . . . . . . : *
Ferner Port . . . . . . . . . . . . . . . . : *
Name des lokalen Hosts . . . . . . . . . . . :
Lokale Internet-Adresse . . . . . . . . . . : *
Lokaler Port . . . . . . . . . . . . . . . : as-database
Zugeordnetes Benutzerprofil . . . . . . . . . : QUSER
TCP-Programmierschnittstelleninformationen:
Status . . . . . . . . . . . . . . . . . . . : Empfangsbereit
Art der Verbindungsöffnung . . . . . . . . . : Passiv

das vergessene close sollte egal sein.

lg andreas

andreaspr@aon.at
18-02-10, 11:32
hast du schon versucht vom browser den cache + cookies zu löschen?

du könntest auch eine verbindung über DSN zu starten, dort dann noch das trace aktivieren und schaun, was das protokoll sagt.

watchdogg
18-02-10, 11:44
Danke Andreas,

ich bin nicht der iSeries-Profi sondern nur ab und zu der Operator, deshalb habe ich ein paar Fragen zu deinen Posts:

1.Post:

mit welchem Befehl komme ich zu diesem Bildschirm.

2.Post:

Ja, Cache und Cookies habe ich schon gelöscht- das war auch mein erster Gedanke.
Wie macht man das mit der Verbindung über DSN und dem Trace.



MfG watchdogg

andreaspr@aon.at
18-02-10, 11:51
@1:
du gibst auf der befehlszeile NETSTAT ein
auswahl 3
mit der auswahl 5 bei " ... as-data > ..." bekommst du die details

@2:
in der systemsteuerung -> verwaltung -> datenquellen (ODBC)
wenn du ein Client Access installiert und verwendet hast gibt es bei Benutzer-DSN einen eintrag QDSN_+System-IP.
entweder verwendest du diesen DSN oder erstellst einen neuen.
Auf jeden fall musst du dort in der konfiguration das trace einschalten.

der code könnte dann so aussehen:

odbc_connect('DSN=QDSN_192.168.0.1', 'myuser', 'pwd', SQL_CUR_USE_ODBC)
für die syntax geb ich jedoch keine garantie ab, da ich mit php nicht viel zu tun habe.

lg andreas

watchdogg
18-02-10, 13:06
@1

Alles i.O. Empfangsbereit , passiv

@2

Ja, wir verwenden Client Access aber den Eintrag "QDSN_+IP" finde ich nicht
Tracing ist auch aktiviert, schreibt aber keine Protokolldateien.

Im Browser erhalte ich folgende Fehlermeldung:



Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, SQL state IM002 in SQLConnect in C:\xampp\htdocs\as400\index.php on line 16



MfG watchdogg

Fuerchau
18-02-10, 13:20
Über die ODBC-Verwaltung (Systemsteuerung->Verwaltung->Datenquellen) musst du einen DSN-Eintrag "AS400" erstellen (1. Parameter des odbc_connect).

andreaspr@aon.at
18-02-10, 13:29
du kannst scheinbar den dsn direkt in der methode eintragen:


int odbc_connect ( string $dsn , string $user , string $password [, int $ cursor_type ] )

und beim erstellen des DSN musst du auch den richtigen treiber angegeben haben.
DRIVER={Client Access ODBC Driver (32-bit)}

watchdogg
18-02-10, 14:04
Danke euch beiden,

es geht jetzt. Ich kann mich verbinden.
Habe ja geschrieben, dass es gestern bereits ging.
Hatte mich zwischenzeitlich mal zum testen mit falschen Benutzerdaten angemeldet und siehe da - auf dem Server war ein kleines Fensterchen offen, wo drin stand, dass die Benutzerdaten falsch sind.

Deswegen konnte ich mich nicht mehr verbinden. Schön blöd - ich hätte nur mal auf den Server schauen sollen.:mad:

Sorry...

MfG watchdogg

andreaspr@aon.at
18-02-10, 14:11
gut zu wissen, dass in solch einem fall php stecken bleibt.
gibts da vlt. die möglichkeit eines monitor oder try?
eine fehlermeldung sollte schon zum user gelangen können.