Ankündigung

Einklappen
Keine Ankündigung bisher.

DB2 / z/OS / AS400 IBM Datenbank Anbindung in PHP

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DB2 / z/OS / AS400 IBM Datenbank Anbindung in PHP

    Hallo Community,


    zu Testzwecken soll über PHP erstmal über XAMPP in Windows 10 Pro eine Datenbankverbindung zu einer IBM AS/400 Maschine hergestellt werden.

    Habe mich schon durchs Netz und das Forum, die PHP Manu gelesen, auch ein Redbook von IBM brachte keine Aufklärung.

    Code:

    PHP-Code:

    $database 
    "*****"# Get these database details from
    $hostname "******"# the web console
    $user "***"#
    $password "*****"#
    $port 50000#
    $ssl_port 50001#

    # Build the connection string
    #
    $driver "DRIVER={IBM DB2 ODBC DRIVER};";
    $dsn "DATABASE=$database; " .
    "HOSTNAME=$hostname;" .
    "PORT=$port; " .
    "PROTOCOL=TCPIP; " .
    "UID=$user;" .
    "PWD=$password;";
    $ssl_dsn "DATABASE=$database; " .
    "HOSTNAME=$hostname;" .
    "PORT=$ssl_port; " .
    "PROTOCOL=TCPIP; " .
    "UID=$user;" .
    "PWD=$password;" .
    "SECURITY=SSL;";
    $conn_string $driver $dsn# Non-SSL
    $conn_string $driver $ssl_dsn# SSL

    # Connect
    #
    $conn odbc_connect$conn_string"""" );
    if( 
    $conn )
    {
    echo 
    "<pre>";
    echo 
    "Connection succeeded.";
    echo 
    "</pre>";

    # Disconnect
    #
    odbc_close$conn );
    }
    else
    {
    echo 
    "<pre>";
    echo 
    "Connection failed.";
    echo 
    "</pre>";

    Momentane Fehlermeldung:

    Warning: odbc_connect(): SQL error: Aufgrund des Systemfehlers 1114: Eine DLL-Initialisierungsroutine ist fehlgeschlagen. (IBM DB2 ODBC DRIVER, C:\Program Files\IBM\SQLLIB\BIN\DB2CLIO.DLL) konnte der angegebene Treiber nicht geladen werden., SQL state IM003 in SQLConnect in ....

    Hat jemand Erfahrung damit und kann mir weiterhelfen?

    Gruß

  • #2
    Eine kurze Google-Suche brachte folgendes ...

    https://www.ibm.com/developerworks/c...a-9bf418b8e3c3

    BIP2322E: Database error: SQL State ''IM003''; Native Error Code '160'; Error Te
    xt ''Specified driver could not be loaded due to system error 1114: A dynamic l
    ink library (DLL) initialization routine failed. (IBM DB2 ODBC DRIVER - DB2COPY1
    , C:\PROGRA~1\IBM\SQLLIB\BIN\DB2CLIO.DLL).''.
    The error has the following diagnostic information: SQL State ''
    IM003'' SQL Native Error Code '160' SQL Error Text ''Specified dr
    iver could not be loaded due to system error 1114: A dynamic link library (DLL)
    initialization routine failed. (IBM DB2 ODBC DRIVER - DB2COPY1, C:\PROGRA~1\IBM
    \SQLLIB\BIN\DB2CLIO.DLL).''
    This message may be accompanied by other messages describing the effect on the i
    ntegration node itself. Use the reason identified in this message with the accom
    panying messages to determine the cause of the error. Use the mqsicvp command to
    test connectivity to this database.

    BIP8040E: Unable to connect to the database.
    The database cannot be accessed with the specified user Id and password pair.
    - Check that the database is running.
    - Check that the database has an adequate number of database connections availa
    ble for use.
    - On Windows, check that an ODBC connection has been created.
    - On systems that use $ODBCINI, check that the file pointed to by $ODBCINI has
    been correctly updated.
    - On z/OS check the BIPDSNAO member of the component's dataset, and check the D
    B2 64bit ODBC driver (DSNAO64C) is in the STEPLIB.
    1) also prüfe bitte, ob du evtl mit dem 64 bit-Treiber mehr Erfolg hast ...
    2) weiter oben wird in dem Forum darauf hingewiesen, dass man "Please try using the Data Server Runtime Client (or the full Data Server Client package)." und evtl weitere "Handarbeiten" anfallen...


    weiteres Suchen förderte noch folgendes zu Tage

    If you haven't found the solution yet, This issue is related to the feature called "Enable OS Security" on windows and has something to do with user permissions but not the driver. While installing your DB2 edition disable this feature and hopefully you'll not see this error again and the reason is 'enable extended security' is not supported on windows for DB2 versions that use IBM Data Server Clients Drivers. Go through below link: https://www.ibm.com/support/knowledg.../c0023391.html and carefully disable this feature or perform a clean uninstall and re-install your DB2 package.
    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

    Kommentar


    • #3
      Ok, danke soweit, wird sogleich abgearbeitet ...

      Kommentar


      • #4
        Immer das gleiche Theater mit ODBC.
        Sieht so aus als sei es ein Bug, schau selber https://communities.actian.com/s/art...tem-error-1114

        Verwende PDO_ODBC und versuche dein Glück damit.

        EDIT: Noch was
        PHP-Code:
        $conn_string $driver $dsn# Non-SSL
        $conn_string $driver $ssl_dsn# SSL 
        Du überschreibst mit der zweiten Anweisung die Variable der ersten Zeile und hast somit immer ssl,, das brauchst du natürlich unter localhost und Xampp nicht.

        Und verwende für Code bitte nicht das Zitat-TAG sondern nehme CODE Tags oder PHP dafür. Schaltet im Editor gleich daneben.

        Kommentar


        • #5
          Zitat von eagle275 Beitrag anzeigen
          Eine kurze Google-Suche brachte folgendes ...

          1) also prüfe bitte, ob du evtl mit dem 64 bit-Treiber mehr Erfolg hast ...
          2) weiter oben wird in dem Forum darauf hingewiesen, dass man "Please try using the Data Server Runtime Client (or the full Data Server Client package)." und evtl weitere "Handarbeiten" anfallen...
          zu 1) - der ist leider schon installiert
          zu 2) - dieser Runtime Client läuft auch schon

          Habe auch schon die entsprechenden DLL´s in die XAMPP Umgebung gelegt und der DSN ist auch schon konfiguriert, sowie die php.ini angepasst ...

          Kommentar


          • #6
            Zitat von protestix Beitrag anzeigen
            Immer das gleiche Theater mit ODBC.
            Sieht so aus als sei es ein Bug, schau selber https://communities.actian.com/s/art...tem-error-1114

            Verwende PDO_ODBC und versuche dein Glück damit.

            EDIT: Noch was
            PHP-Code:
            $conn_string $driver $dsn# Non-SSL
            $conn_string $driver $ssl_dsn# SSL 
            Du überschreibst mit der zweiten Anweisung die Variable der ersten Zeile und hast somit immer ssl,, das brauchst du natürlich unter localhost und Xampp nicht.

            Und verwende für Code bitte nicht das Zitat-TAG sondern nehme CODE Tags oder PHP dafür. Schaltet im Editor gleich daneben.
            Hallo, ja versuche jetzt über PDO alleine das macht Sinn ...

            Kommentar


            • #7
              ....EDIT mittlerweile erledigt...

              Kommentar


              • #8
                Zitat von protestix Beitrag anzeigen
                ....EDIT mittlerweile erledigt...
                Hallo Protestix,

                sieht jetzt so aus und meiner Meinung nach schon ein bischen besser:

                PHP-Code:

                echo "<pre>";
                try {
                  
                $connection = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=******;HOSTNAME=******;PORT=446;UID=******;PWD=******""UID=******""PWD=******", array(
                      
                PDO::ATTR_PERSISTENT => TRUE,
                      
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
                  );
                }
                catch (
                Exception $e) {
                  echo(
                $e->getMessage());
                }
                echo 
                "</pre>"
                Kommt aber noch folgende Fehlermeldung:

                PHP-Code:
                 SQLSTATE=42968SQLDriverConnect: -1598 [IBM][CLI DriverSQL1598N Ein Versucheine Verbindung zum Datenbankserver herzustellenist aufgrund eines Lizenzierungsproblems fehlgeschlagenSQLSTATE=42968 
                Muß der Layer 8 was unternehmen? Oder ist der Fehler immer noch dort angesiedelt??

                Kommentar


                • #9
                  Zumindest meldet sich jetzt der Driver also alles OK, bis auf das Lizenzproblem, aber da können wir dir nicht weiterhelfen.

                  Kommentar


                  • #10
                    Hallo, ja ich bin jetzt direkt über
                    PHP-Code:
                     "....PDO("odbcDRIVER={ .... 
                    gegangen und es funzt .. Danke für den Hinweis mit ODBC.

                    Musste noch einen geeigneten Treiber, der bereits in Windows installiert war, hinzufügen, eine DLL in Apache hinterlegen und in der PHP.ini freigeben ... Danke.

                    Achso: odbc muß "klein" geschrieben werden ... alles andere über die AS400 würde ich in Großbuchstaben angeben .

                    Kommentar


                    • #11
                      Hallo Community,

                      ich hole den Thread nochmal hoch, mitterweile habe ich einen PDO Wrapper gebaut für mein System. Der Webserver ist ein IIS und funktioniert soweit ohne Probleme.

                      Nun rufe ich eine Stored Procedure über die ODBC_PDO Klasse auf, dazu greife ich auf den i Access Treiber des IIS zu mittels Connection String, setze noch bestimme Librarys etc. .

                      Funktioniert alles Prima, nur das die Stored Procedure zweimal ausgeführt wird, sprich ich buche damit exakt einen Artikel um und es werden zum selben Zeitpunkt zwei Artikel umgebucht ... also immer doppelt.

                      Kann es sein das die Treiberinformationen im Header übermittelt werden und dann quasi im selben Moment mein lokaler, also auf dem Entwickler Client installierter ODBC Treiber angesprochen wird und somit der Webserver und der Client auf der DB die SP aufrufen?

                      Alles andere habe ich schon ausgeschlossen, mein Logging zeigt mir das ich im Wrapper nur einmal das Statement auslöse ...

                      Gruß.

                      Kommentar


                      • #12
                        Zitat von ChookaP Beitrag anzeigen
                        Alles andere habe ich schon ausgeschlossen, mein Logging zeigt mir das ich im Wrapper nur einmal das Statement auslöse ...
                        Reduziere das Problem auf das kleinstmögliche. Alles was nicht nötig ist, nimmst du weg. Da gehört ein selbst geschreibener Wrapper dazu, dazu gehört der Webserver, eventuell auch PHP ansich (Abfrage direkt in DB ausführen mit anderen Client), und evnetuell brauchst du auch eine Dummy-Prozedur.

                        Z.B.:
                        test.php
                        PHP-Code:
                        <?php
                        $db 
                        = new PDO(...)
                        $db->query("EXEC böseStoredProcedure()");
                        Ausführen mit:
                        php test.php

                        Kommentar


                        • #13
                          Habs gefunden. Der Layer 8 war das Problem ...

                          Kommentar

                          Lädt...
                          X