Ankündigung

Einklappen
Keine Ankündigung bisher.

exec funktioniert nicht bei Oracle-DB

Einklappen

Neue Werbung 2019

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

  • exec funktioniert nicht bei Oracle-DB

    Hallo,

    ich habe einen Code geschrieben der eine mySQL Datenbank anlegt. Jetzt habe ich versucht das ganze auch auf der ORACLE-DB anzuwenden.

    Das Problem ist der Befehl: $conn->exec($sql);
    Dieser funktioniert bei mySQL nicht bei Oracle. Hab schon gegoogelt aber leider ohne Erfolg...


    Hast Du einen Tipp für mich?



    PHP-Code:

    <?php

    $servername 
    "localhost";
    $username "root";
    $password "";
    $dbname "test";

    $conn = new PDO("mysql:host=$servername;dbname=$dbname"$username$password);

    function 
    dbConstructor ($conn)
    {

        
    $sql "DROP TABLE MyGuests";

        
    $conn->exec($sql);
        echo 
    "- Table MyGuests created successfully<br>";

        
    $sql "DROP TABLE MyGuests2";

        
    $conn->exec($sql);
        echo 
    "- Table MyGuests created successfully<br>";


        
    $sql "CREATE TABLE MyGuests (
            id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
            firstname VARCHAR(30) NOT NULL,
            lastname VARCHAR(30) NOT NULL,
            email VARCHAR(50),
            reg_date TIMESTAMP,
            dep VARCHAR(30) NOT NULL
            )"
    ;

        
    $conn->exec($sql);
        echo 
    "- Table MyGuests created successfully<br>";

        
    $sql "CREATE TABLE MyGuests2 (
            id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
            firstname VARCHAR(30) NOT NULL,
            lastname VARCHAR(30) NOT NULL,
            email VARCHAR(50),
            reg_date TIMESTAMP,
            xxx VARCHAR(30) NOT NULL            
            )"
    ;

        
    $conn->exec($sql);
        echo 
    "- Table MyGuests2 created successfully<br>";
    }
            
    $conn null;

  • #2
    In dem Code kommt nur MySQL und kein Oracle vor. Du solltest schon auch den passenden Code posten.

    Kommentar


    • #3
      Das Drop Table würde schon funktionieren. Wenn vielleicht eine Oracle DB Lib eingebunden wäre..
      Ansonsten funktionieren viele der DML Typen so nicht, besonders "Auto_Increment" uvam.
      Es gibt da grob 2-3 Möglichkeiten:
      Fehlermeldungen in PHP nutzen und die Oracle Fehlermeldung auswerten, verstehen und korrigieren.
      Statements für sich genommen einzeln in Oracle abfeuern und die Fehlerausgaben lesen, verstehen, korrigieren
      Doku lesen, z.B. über Oracle Datentypen oder die verschiedensten Möglichkeiten der Primärschlüssel Erzeugung und direkt alles richtig hinschreiben.
      Achso, vielleicht auf die Version der Doku und der Oracle DB achten, sollte zusammen passen.

      Kommentar


      • #4
        Zitat von Perry Staltic Beitrag anzeigen
        Fehlermeldungen in PHP nutzen und die Oracle Fehlermeldung auswerten
        Warum überhaupt mit PHP? Ich würde erstmal die Abfragen mit einem Oracle-Client zum Laufen kriegen und erst dann würde ich anfangen in PHP zu programmieren.

        Kommentar


        • #5
          Ja, schrieb ich ja schon.

          So würde es auch mit älteren Systemen (<12c) gehen. Und es ist am flexibelsten- wenn man denn möchte.

          Code:
          CREATE TABLE MyGuests (
            id number(10) NOT NULL PRIMARY KEY,
            firstname VARCHAR2(30) NOT NULL,
            lastname VARCHAR2(30) NOT NULL,
            email VARCHAR2(50),
            reg_date TIMESTAMP,
            dep VARCHAR2(30) NOT NULL
          );
          
          CREATE SEQUENCE auto_increment;
          
          CREATE OR REPLACE TRIGGER auto_increment
            BEFORE INSERT ON MyGuests
            FOR EACH ROW
          BEGIN
            SELECT auto_increment.nextval
              INTO :new.id
              FROM dual;
          END;
          In neuen Systemen verwendet man "Identity", ohne Trigger, ohne Sequence ...

          Kommentar

          Lädt...
          X