MySQL Syntax prüfen

  • Moin!

    Kennt zufällig jemand in PHP eine Möglichkeit bzw. ein Script oder was auch immer... um einen String, bevor dieser als Query ausgeführt wird, auf richtige SQL-Syntax zu prüfen?

    Danke und Gruß,
    Markus

  • Meinst du jetzt zum Schutz vor SQL Injections?

    PHP
    $inhalt = "bla bli '.'OR .''*'*=$&/§$";
    mysql_query("INSERT INTO `blubb` (`blubb`) VALUES ('".mysql_escape_string($inhalt)."')");

    Zur Fehlersuche reicht doch:

    PHP
    echo mysql_error();

    Der frühe Vogel fängt den Wurm,
    aber die zweite Maus bekommt den Käse.

  • Ich nehme mal an, dass er nicht mysql_real_escape_string meint.

    mysql_error() hilft auch nicht wenn er vor dem abschicken kontrollieren möchte.

    Ein Script dafür weiß ich leider nicht. Ich wäre aber neugierig wozu du sowas brauchst. :)
    Lässt du SQL-Befehle durch User zu?

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Nein ich schreibe gerade ein PHP-Script das über Commandline ausgeführt wird. Als Parameter soll unter anderem eine Datei mit SQL-Statements angegeben werden welche PHP einliest und ausführt.
    Es geht um automatische Datenbank aktualisierung mehrerer Datenbanken.

    Auf unseren Servern (ca. 40) sind jeweils etwa 100 Instanzen eines CMS von dem jedes einzelne natürlich eine eigene Datenbank nutzt. Natürlich könnte ich das ganze dann wahrscheinlich einfacher über ein Shell-Script lösen aber aus verschiedenen Gründen wollte/sollte ich das ganze über PHP lösen.

    Ist auch nicht so unglaublich wichtig (das Syntax prüfen), da das Script ja eh nur Firmenintern verwendet.

    Lässt du SQL-Befehle durch User zu?

    Wer macht denn sowas? :P

    Einmal editiert, zuletzt von FaFoo (8. Januar 2009 um 20:52)

  • Das klingt nach einer interessanten Aufgabe. Ich wünsche dir viel Spass und Erfolg damit. :)

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Ist zwar schon etwas älter, bin aber grad hier gelandet, da ich ein ähnliches Problem habe.

    Da es scheinbar von MySQL keine Möglichkeit gibt einen Syntax-Check VOR der Ausführung zu machen, nutze ich nun folgendes:
    - bei lesenden Befehlen (SELECT) verwende ich EXPLAIN (also EXPLAIN SELECT ...)
    - bei schreibenden Befehlen verwende ich BEGIN / ROLLBACK

    Letzteres geht natürlich nur bei Tabellentypen die Transaktionen unterstützten - also z.b. bei InnoDB - nicht aber bei MyISAM.
    Das checkt nicht nur die allgemeine SQL-SYNTAX sondern ebenfalls auch die Namensgebung. Ein "SELECT * FROM Artikeel" würde also auch fehlschlagen, obwohl die Syntax an sich korrekt ist.

    Hoffe das hilft mal irgendwem

    Gruß
    Plasm