mittels shell_exec Tabelle in DB anlegen

  • moinmoin@community,


    mal wieder eine Frage von mir. Ich versuche mittels shell_exec eine Tabelle in einer DB anzulegen. Mein aktueller Code macht dies jedoch nicht so recht.


    Code
    $string = "mysql -D DBname -u DBuser -pDBpass -e \"CREATE TABLE testtabelle(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY ( id );\" ";
    $cmd = escapeshellcmd($string);
    $test = shell_exec($cmd);
    echo $test;


    seltsamerweise funzt der selbe Code, wenn ich mir nur die Tables anzeigen lassen will.


    Code
    $string = "mysql -D DBname -u DBuser -pDBpass -e \"show tables\" ";
    $cmd = escapeshellcmd($string);
    $test = shell_exec($cmd);
    echo $test;


    Ich frage mich nun, warum ich keine Tabelle damit erzeugen kann. Mein CREATE-Statement ist nicht falsch. Ich habe es auch als root getestet. Hat also auch nix mit Rechten zu tun. Gibt es andere Probleme, die ich hier vergesse?


    Die Eingabe direkt in der Konsole bringt aber auch keinen Erfolg:

    Code
    mysql -D DBname -u DBuser -pDBpass -e "CREATE TABLE testtabelle(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY ( id );"
  • 2 Fehler:


    • Schließende Klammer
    • In welcher Datenbank


    [font="Courier New"]mysql -D DBname -u DBuser -pDBpass Datenbankname -e "CREATE TABLE testtabelle(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY ( id ) );"[/font]

    Edited once, last by KKoPi ().

  • Stimmt, er schreibt zB testtabelle( aber schließt die ( nicht mehr. Einige Variablen fehlen aber auch es sei denn er ersetzt DBname und DBuser etc durch statischen Text.


    Aber wie gesagt wäre es denk ich sinnvoller mysqli zu verwenden.



    //EDIT: "-D DBname" ist der Datenbankname der verwendet werden soll @ KKoPi. Entweder man gibt das Parameter an oder muss es so schreiben wie Du vorschlägst, aber nicht beides ;) Siehe dazu man mysql in der Konsole

  • boah spitze. die lösung war mal wieder total einfach :(
    so, wie kkopi es geschrieben hat. Der Fehler war die fehlende Klammer. Die war vorher noch da, hab ich aber dann bei dem Befehl mit c&p verloren. Damit hatte ich dann wohl 2 Fehler. Datenbankname stand vorher auch noch an der falschen Stelle. Dann hab ich DBname umpositioniert - nur leider ging es trotzdem nicht (eben wegen der Klammer).
    Wenn nur alles so einfach zu lösen wäre. Da das nur ein erster Test war, wird jetzt umgebaut auf mysqli mit Variablen. Und immer mit dem Wissen, nach stundenlangem Coden die Zahlen nicht mehr von den Buchstaben unterscheiden zu können... Vllt tut ne Pause doch mal gut :thumbs1: :thumbs1:


    Ihr seid die Besten, Dankööö :bravo2: :bravo2: :bravo2:


    EDIT: warum shell_exec() und nicht exec() ? Mhhh, gibt es gute Gründe dafür? Ist es vllt. schneller, sicherer, fehlertoleranter, einfacher ?? Ich lass mich da gern beraten :shy: :shy:

    Edited once, last by noobee ().


  • Datenbankname stand vorher auch noch an der falschen Stelle. Dann hab ich DBname umpositioniert


    Nein eigentlich nicht.
    Genau so wie "-u" ein Parameter ist, ist "-D" auch ein Parameter mit dem man die zu verwendete Datenbank angibt, was Du ja auch genutzt hast.
    Also entweder man verwendet:

    Code
    mysql -D DBname -u DBuser -pDBpass -e "CREATE TABLE testtabelle (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY id);"


    Oder:

    Code
    mysql -u DBuser -pDBpass -e "CREATE TABLE testtabelle (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY id);" DBname


    ...oder ein Parameter um eine *.sql Datei zu verarbeiten...