Andreas: Mit PHP auf Informix Datenbank zugreifen

Hallo,

ich suche jetzt schon den ganzen Vormittag das Internet ab.
Bis jetzt habe ich immer nur ein paar ansätze gefunden mehr aber auch nicht.

Das Problem ist auch das ich nicht sehr erfahren im Einrichten von PHP bin. Bis jetzt habe ich noch keine für mich verständliche Erklärung gefunden wie das funktionieren kann.

Also ich weiß zumindest jetzt das es geht ;-)

Nun hoffe ich das irgendjemand hier mir erklären will/kann wie man mit PHP auf eine Informix Datenbank zugreifen und mir ihr arbeiten kann. Wie stell ich die Verbindung her?

Ich hoffe irgendjemand da draußen kann mir helfen.
Vielen Dank

Gruß
Andreas

  1. echo $begrüßung;

    Nun hoffe ich das irgendjemand hier mir erklären will/kann wie man mit PHP auf eine Informix Datenbank zugreifen und mir ihr arbeiten kann. Wie stell ich die Verbindung her?

    Als erstes brauchst du auf dem Client-Rechner einen Informix-Client. Den gibt es bei IBM für dein System, zumindest jedoch für Linux und Windows. Letztens musste man sich da anmelden, damit man den ziehen konnte.
    Nach der Installation sind unter Windows mit setnet32 die Server zu konfigurieren, zu denen du eine Verbindung herstellen willst. Wenn alles richtig war, kannst du mit der "ILogin Demo" eine Verbindung aufbauen. Ein leeres Dialogfenster ist in Ordnung, eine Fehlermeldung nicht. Zur Meldung findest du einen erläuternden Text mit "Find Error".

    Unter Linux lief die Konfiguration, soweit ich mich erinnere, über diverse Textdateien.

    Dann brauchst du natürlich die Informix-Extension für PHP. Unter Linux muss es mit einkompiliert werden, oder ein entsprechendes Paket installiert werden. Unter Windows ist die entsprechende DLL zu aktivieren.

    Und dann kann es auch schon losgehen. Weitere Hinweise sind den Userkommentaren im PHP-Handbuch zu entnehmen. Wichtig ist der Name des Servers. Damit meine ich nicht den DNS-Namen sondern den der im Informix-Server konfiguriert ist. Die Verbindung zwischen Ifx-Server-Name und DNS-Name ist über die setnet32 oder die Linux-Konfigurationsdateien herzustellen.

    echo "$verabschiedung $name";

    1. Ok!
      Erstmal vielen Dank für deine ausführliche Antwort.
      Ich werd schauen ob ich das hinbekomme.

      Wenn nicht meld ich mich wieder ;-)

      Ich verwende übrigens Windows, hab ich leider vergessen zu erwähnen.

      Nochmals Danke.

      Gruß
      Andreas

      1. Hallo,
        da bin ich wieder.

        also es scheitert schon am download.
        Hab mich bei IBM angemeldet und alles gemacht und wenn ich das dann runterladen will bekomme ich foldende Fehlermeldung:

        -------------------------------------------------
        Error

        An error occurred while processing your request.

        Class name: com.ibm.ecc.common.ECCException

        Message: Cmn.ServiceProviderError

        Root cause class name: com.ibm.ecc.protocol.ClientInsufficientInformation

        Root cause description: WebIdentity Unique ID not specified

        Order number: 5119
        -------------------------------------------------

        Kann ich das nicht noch irgendwo anders runterladen?

        Gruß
        Andreas

        1. echo $begrüßung;

          Hab mich bei IBM angemeldet und alles gemacht und wenn ich das dann runterladen will bekomme ich foldende Fehlermeldung: [...]
          Kann ich das nicht noch irgendwo anders runterladen?

          Das weiß ich nicht. Ich hab das immer dort gezogen (wobei sich die Modalitäten im Laufe der Zeit auch geändert haben - früher mit Aktivierungskey, dann frei und ohne Anmeldung, nun immer noch frei aber mit Anmeldung). Ich vermute, dass die Stellen, an denen man den Informix-Client bekommt, nicht viel mehr als diese eine sind, denn so sehr verbreitet ist dieses DBMS anscheinend nicht.

          echo "$verabschiedung $name";

          1. echo $begrüßung;

            Nachtrag: Vielleicht ist ein Client in einem bei dir schon vorhandenen Software-Paket dabei. Schau doch mal in der (virtuellen, real existierenden und organisatorischen) Umgebung des Informix-Servers nach.

            echo "$verabschiedung $name";

            1. Ist leider nichts zu finden.
              Das Problem ist auch das alles hier von einer Firma mal eingerichtet wurde und ich als neuling nun die schwierigkeit hab hier was zu finden. Ich wollte halt zumindest mal die Daten aus den vorhandenen Tabellen auslesen und verarbeiten.

              Und das Informix nicht gerade weit verbreitet ist, ist wohl war.

              Naja, kann man wohl erst mal nichts machen.

              Aber danke für deine Hilfe.

              Gruß
              Andreas

              1. Nachmal ne frage: Kostet der Client eigentlich was?
                Oder ist der frei zum Herunterladen.

                1. echo $begrüßung;

                  Nachmal ne frage: Kostet der Client eigentlich was?
                  Oder ist der frei zum Herunterladen.

                  Im März dieses Jahres war nur der Anmeldezwang vorhanden, ansonsten gab es den ohne weitere Bedingungen.

                  echo "$verabschiedung $name";

                  1. Hallo,

                    also ich hab das jetzt soweit hinbekommen.
                    Client ist runtergeladen, installiert und konfiguriert.

                    Die extension=php_ifx.dll ist in der php.ini ebenfalls aktiviert.

                    Doch leider kommt trotzdem folgende Fehlermeldung:

                    Fatal error: Call to undefined function ifx_connect() in c:\programme\e-novative\WAMP\www\Homepage\informix_php\index.php on line 2

                    Was fehlt denn noch?

                    Gruß
                    Andreas

                    1. echo $begrüßung;

                      Die extension=php_ifx.dll ist in der php.ini ebenfalls aktiviert.
                      Fatal error: Call to undefined function ifx_connect() in

                      Zeigt die phpinfo() die geladene Informix-Erweiterung an? Ist die DLL überhaupt vorhanden? Welche PHP-Version verwendest du? Unter PHP4 gab es unterschiedliche Installationspakete.
                      Kann PHP auf die anderen DLL-Dateien zugreifen (ich meine die allgemeinen, nicht die speziellen für die diversen Webserver)?

                      echo "$verabschiedung $name";

                      1. Hallo,

                        sorry für das doppel-posting. Jetzt weis ich ja das auch unten gelesen wird ;-)

                        Zeigt die phpinfo() die geladene Informix-Erweiterung an?

                        Nein!

                        Ist die DLL überhaupt vorhanden?

                        JA ist sie!

                        Welche PHP-Version verwendest du?

                        Version 5.0.4

                        Kann PHP auf die anderen DLL-Dateien zugreifen (ich meine die allgemeinen, nicht die speziellen für die diversen Webserver)?

                        Weis nicht genau was du meinst. ;-) also mysql.dll usw... sind auch vorhanden und er muss drauf zugreifen können den mysql geht.

                        Hier als Anhang noch meine php.ini vieleicht kannst du dort etwas erkennen.
                        Danke.

                        Gruß
                        Andreas

                        1. Das mit der php.ini funktioniert nicht.
                          Wahrscheinlich ist der Text zu lang.

                          Gruß
                          Andreas

                        2. echo $begrüßung;

                          Zeigt die phpinfo() die geladene Informix-Erweiterung an?
                          Nein!

                          Das ist die Voraussetzung, dass die Informix-Funktionen überhaupt zur Verfügung stehen.

                          Ist die DLL überhaupt vorhanden?
                          JA ist sie!

                          Wenn du eine andere DLL aus dem Extensions-Verzeichnis in die php.ini einbindest, die zuvor nicht von phpfinfo() aufgeführt wurde, siehst du wenigstens diese?

                          Welche Server-Schnittstelle (CGI, Apache-Modul, ISAPI, ...) und welchen Server verwendest du?

                          Möglicherweise muss irgendwas neu gestartet werden, damit die Änderungen wirksam werden.

                          Welche PHP-Version verwendest du?
                          Version 5.0.4

                          So eine alte? Die hat schon mehr als 2 Jahre auf dem Buckel. Aktuell ist derzeit die 5.2.3.

                          Kann PHP auf die anderen DLL-Dateien zugreifen (ich meine die allgemeinen, nicht die speziellen für die diversen Webserver)?
                          Weis nicht genau was du meinst. ;-) also mysql.dll usw... sind auch vorhanden und er muss drauf zugreifen können den mysql geht.

                          Nun, die Frage wäre auch erst in der Folge relevant, wenn PHP eine Meldung auswirft, dass die php_ifx.dll nicht geladen werden kann *). Das kann dann auch daran liegen, dass von dieser DLL benötigte Dateien nicht gefunden wurden. Aber momentan scheint mir, dass deine Änderungen in der php.ini noch nicht aktiv wurden. In der phpinfo() steht auch, welche ini-Dateien gelesen wurden. Nicht dass du eine falsche geändert hast.

                          *) Diese Meldung erscheint als Dialog auf der Konsole. Falls du mit Remote Desktop auf den Windows-Server zugreifst, siehst du sie nicht. Du merkst nur, dass PHP nicht weiter reagiert, weil es auf das Wegklicken der Meldung wartet.

                          echo "$verabschiedung $name";

                          1. Das ist die Voraussetzung, dass die Informix-Funktionen überhaupt zur Verfügung stehen.

                            Hab ich mir schon gedacht, steht aber nicht drin.

                            Wenn du eine andere DLL aus dem Extensions-Verzeichnis in die php.ini einbindest, die zuvor nicht von phpfinfo() aufgeführt wurde, siehst du wenigstens diese?

                            Leider nicht! Scheint so als ob es ihn nicht wirklich interessieren würde was ich aktivier oder deaktivier. Das ist komisch ...
                            Ist aber mit sicherheit die richtige php.ini

                            Welche Server-Schnittstelle (CGI, Apache-Modul, ISAPI, ...) und welchen Server verwendest du?

                            Apache

                            Möglicherweise muss irgendwas neu gestartet werden, damit die Änderungen wirksam werden.

                            Ích werd mal komplett neu starten und schauen ob die Änderungen wirksam werden.

                            Gruß
                            Andreas

                            1. Hallo,

                              super, super, super ;-)
                              Ich kann jetzt eine Verbindung zu meiner Informix Datenbank aufbauen.
                              Es lag wirklich nur am Neustart.
                              Endlich funktioniert es. Bin so froh...
                              Vielen Dank für deine Hilfe.

                              Ich würde dich jetzt ungern nochmal belästigen, aber vieleicht kannst du mir noch ein letztes mal helfen.
                              Wie du selbst gesagt hast, bis du warscheinlich der einzige hier der das beherscht.

                              ich habe jetzt folgenden code:
                              ------------------------------------------------
                              $connection = ifx_connect("db@server", "user", "pw");
                              if (!$connection) {
                              echo "keine Verbindung!";
                              exit;
                              }
                              $sql = "SHOW DATABASES";
                              $sql_result = ifx_query($sql,$connection);
                              ifx_htmltbl_result($sql_result,"border=1");
                              ifx_free_result($sql_result);
                              ifx_close($connection);
                              ------------------------------------------------

                              und bekomme als Fehlermeldung dies:
                              ------------------------------------------------
                              Warning: ifx_query() [function.ifx-query]: Prepare fails (E [SQLSTATE=42 000 SQLCODE=-201]) in c:\programme\e-novative\WAMP\www\Homepage\informix_php\index.php on line 16

                              Warning: ifx_htmltbl_result(): supplied argument is not a valid Informix Result resource in c:\programme\e-novative\WAMP\www\Homepage\informix_php\index.php on line 19

                              Warning: ifx_free_result(): supplied argument is not a valid Informix Result resource in c:\programme\e-novative\WAMP\www\Homepage\informix_php\index.php on line 22
                              ------------------------------------------------

                              was mach ich den verkehrt?

                              Vielen Dank nochmal für deine Hilfe.

                              Gruß
                              Andreas

                              1. echo $begrüßung;

                                Ich würde dich jetzt ungern nochmal belästigen, aber vieleicht kannst du mir noch ein letztes mal helfen.

                                Ich helfe auch ein allerletztes Mal und ein allerallerletztes Mal und ... so weiter.

                                $connection = ifx_connect("db@server", "user", "pw");
                                if (!$connection) {
                                echo "keine Verbindung!";
                                exit;
                                }

                                Hier reagierst du auf Fehlerzustände, wenn auch mit Flucht.

                                Warning: ifx_htmltbl_result(): supplied argument is not a valid Informix Result resource in c:\programme\e-novative\WAMP\www\Homepage\informix_php\index.php on line 19

                                Im weiteren Verlauf reagierst du nicht mehr auf Fehler, was dir das Rückgabeergebnis der verwendeten Funktion mitteilen wollte, weswegen es dann zu diesen Folgefehlern kommt.

                                Warning: ifx_query() [function.ifx-query]: Prepare fails (E [SQLSTATE=42 000 SQLCODE=-201]) in c:\programme\e-novative\WAMP\www\Homepage\informix_php\index.php on line 16

                                Die -201 ist der Fehlercode, zu dem du dir weitere Informationen mit dem Programm "Find Error" des Informix-Client-Paketes holen kannst. Die Codes sind alle im Index aufgeführt.

                                Außerdem gibt es die Funktion ifx_errormsg(), die dir den Fehler im Wortlaut ausgibt.

                                $sql = "SHOW DATABASES";

                                Informix ist nicht MySQL.

                                echo "$verabschiedung $name";

                                1. $sql = "SHOW DATABASES";

                                  Informix ist nicht MySQL.

                                  Ja ok, das leuchtet ein.
                                  Hab jetzt ein bisschen durchs netzt gestöbert.
                                  Wie kann ich denn alle Datenbanken anzeigen lassen die existieren,
                                  oder wie kann ich denn alle Tabellen einer Datenbank anzeigen.

                                  ich habe "info" gefunden.
                                  Damit soll es gehen, aber es funktioniert nicht.
                                  INFO Tables

                                  gibts denn Überhaupt einen Befehl der mir alle Tabellen anzeigt.
                                  Und was wird den generell in Informix benutzt? SQL?
                                  Gibt es da gute hilfen im Netz?

                                  Dank Dir.

                                  Gruß
                                  Andreas

                                  1. echo $begrüßung;

                                    Wie kann ich denn alle Datenbanken anzeigen lassen die existieren,

                                    Das weiß ich nicht. Man verbindet sich ja direkt auf eine Datenbank (datenbank@server), so dass du mit anderen Datenbanken in dieser Verbindung gar nicht mehr in Berührung kommst. Die Namen muss man aber irgendwie abfragen können, denn wenn du mal zum Test so tust, als ob du eine ODBC-Verbindung anlegst, dann kannst du nach Eingabe von Benutzernamen und Passwort ein Datenbankenfeld aufklappen, und da stehen alle drin (vermutlich nur die, auf die man Zugriff hat).

                                    oder wie kann ich denn alle Tabellen einer Datenbank anzeigen.

                                    Dafür gibt es die Systemtabellen. SYSTABLES wäre das für die Tabellen. Diese und alle anderen Systemtabellen sind in der Referenz ("Guide to SQL: Reference") aufgeführt. Die Dokumentation zu deiner Informix-Ausgabe bekommst du unter http://www-306.ibm.com/software/data/informix/pubs/library/

                                    ich habe "info" gefunden.
                                    Damit soll es gehen, aber es funktioniert nicht.
                                    INFO Tables

                                    "Funktioniert nicht" heißt in deinem Fall? Vermutlich "Syntax error". Im Handbuch steht, dass dieses Statement nur von "dbaccess" aus ausführbar ist. Ob das beim Client mit dabei ist? Ich glaube nicht. Ich hab das nur auf Servermaschinen zu Gesicht bekommen. Das ist dort ein Verwaltungsprogramm (mit einer recht betagten Oberfläche).

                                    echo "$verabschiedung $name";