DB-Tabelle wird nicht via PHP-Script befüllt

  • Hallo!

    Habe nun schon längere Zeit nach einer Ursache gesucht, komme aber leider nicht weiter. Vielleicht hat ja jemand von Euch einen guten Tipp?!

    Über ein PHP-Script lese ich die Verzeichnisstruktur eines Ordners aus.
    Weiterführend lese ich bei den darin befindlichen Bild-Dateien die EXIF-Daten ein, damit ich die gesammelten Informationen in eine MySQL-Datenbank schreiben kann.


    Das "echo" aus dem Script liefert m. E. auch passende Werte (habe es mal auf 3 Einträge reduziert):


    Code
    REPLACE INTO gallery (DateTime,FileName,FileSize,GPSLatitude,GPSLongitude,GPSAltitude,Description) VALUES ('2018-02-11 11:49:21','dji_0011.jpg','606967','49.070833333333','8.6941666666667','0', 'dji_0011.jpg')
    REPLACE INTO gallery (DateTime,FileName,FileSize,GPSLatitude,GPSLongitude,GPSAltitude,Description) VALUES ('2018-02-11 11:48:54','dji_0008.jpg','791986','49.070833333333','8.6941666666667','0', 'dji_0008.jpg')
    REPLACE INTO gallery (DateTime,FileName,FileSize,GPSLatitude,GPSLongitude,GPSAltitude,Description) VALUES ('2018-02-11 11:51:48','dji_0018.jpg','1223510','49.070833333333','8.6938888888889','0', 'dji_0018.jpg')


    Leider funktioniert das Schreiben in die Datenbank per PHP nicht, aber wenn ich jede Zeile des ausgespuckten SQL-Befehls _einzeln_ in die SQL-Konsole phpMyAdmin eingebe, dann werden die Daten in die Tabelle eingetragen.

    Die Tabelle "gallery" habe ich - bis auf den ersten Wert, weil ich ein "Primary Key" setzen will - der Einfachheit halber erst einmal mit dem Datentyp "text" versehen.

    db.jpg

    Die Verbindung zur Datenbank kommt via $mysqli = mysqli_connect($db_host,$db_user,$db_pass,$db_data); zustande, das habe ich geprüft.


    Habe auch schon aus dem REPLACE INTO ein INSERT INTO gemacht - ohne Wirkung. Auch das $res und das mysqli_error($mysqli); geben keine Informationen aus - das macht mich besonders stutzig.

    Hat jemand noch eine Idee, was ich falsch mache?

    Danke schonmal!
    Hendrik

  • In deinem fertigen SQL Statement fehlt am Ende immer das ;


    Wenn mich meine mangelhaften SQL Kenntnisse nicht ganz täuschen, würde das Semikolon am Zeilenende dein Problem lösen.

  • Hatte ich auch bereits probiert, aber bringt leider auch nicht den gewünschten Erfolg :-/


    Code
    $sql  = "REPLACE INTO gallery ";
    $sql .= "(DateTime,FileName,FileSize,GPSLatitude,GPSLongitude,GPSAltitude,Description) VALUES ";
    $sql .= "('$im_DateTime','$im_FileName','$im_FileSize','$im_GPSLatitude','$im_GPSLongitude','$im_GPSAltitude', '$im_FileName');";
    
    echo "<br>".$sql;
    $res = mysqli_query($mysqli, $sql);
    echo "<li>RES [".$res."] ERR [".mysqli_error($mysqli)."]";

    Resultat:

    Code
    REPLACE INTO gallery (DateTime,FileName,FileSize,GPSLatitude,GPSLongitude,GPSAltitude,Description) VALUES ('2018-02-11 11:49:21','dji_0011.jpg','606967','49.070833333333','8.6941666666667','0', 'dji_0011.jpg');
    RES [] ERR []
    REPLACE INTO gallery (DateTime,FileName,FileSize,GPSLatitude,GPSLongitude,GPSAltitude,Description) VALUES ('2018-02-11 11:48:54','dji_0008.jpg','791986','49.070833333333','8.6941666666667','0', 'dji_0008.jpg');
    RES [] ERR []
    REPLACE INTO gallery (DateTime,FileName,FileSize,GPSLatitude,GPSLongitude,GPSAltitude,Description) VALUES ('2018-02-11 11:51:48','dji_0018.jpg','1223510','49.070833333333','8.6938888888889','0', 'dji_0018.jpg');
    RES [] ERR []

    Für mich sieht es fast so aus, als wenn das SQL erst gar nicht bei der DB-Tabelle ankommt?! :-/


    Habe nochmals vor Aufruf der Function einen printf ("System status: %s\n", $mysqli->stat()); abgesetzt. Sieht gut aus:

    System status: Uptime: 202125 Threads: 4 Questions: 30560024 Slow queries: 0 Opens: 174917 Flush tables: 1 Open tables: 161807 Queries per second avg: 151.193

  • Tue uns und dir bitte den Gefallen und mach es vernünftig (gemeint ist Escaping - hier der Spalten, denn "DateTime" ist ein reservierter Ausdruck). Dann klappt das bestimmt auch.

  • Habe heute nochmal komplett neu angefangen und habe den umständlichen Code für function scan_images($dir) optimiert.
    Mit dem neuen, übersichtlicheren Code funktioniert es jetzt einwandfrei:


    Danke für Eure Unterstützung! :)
    Hendrik