2010-12-09 10 views
4

Bevor ich reinspringe und meine eigene rolle, dachte ich, ich würde zuerst hier nachfragen.Gibt es eine leichte sql Parser-Klasse in PHP geschrieben, um dies zu tun?

Ich suche eine elementare Analyse von Zufalls SQL-Befehle, um zu tun:

  1. die Feldnamen kontrollieren, die in ‚SELECT die verwendet werden (einschließlich Subqueries)
  2. die Feldnamen überprüfen, dass werden eingesetzt, in ‚der JOIN (einschließlich Subqueries)
  3. inspizieren die Namen der Tabellen in der Abfrage verwendet werden (einschließlich Subqueries)

ich habe einige SQL Parse gesehen r Klassen da draußen, aber sie sind viel zu "Schwergewicht" für die oben beschriebenen Anwendungsfälle.

Kennt jemand eine leichte Klasse, die mindestens einige der erforderlichen Funktionen hat?

Worst-Case-Szenario, wenn ich einen Parser schreiben muss, was wäre der beste Weg, einen solchen Parser zu schreiben (normalerweise schreibe ich einen Parser, würde ich normalerweise auf Werkzeuge zurückgreifen, die in PHP nicht verfügbar sind) Tipps, wie man eine "grobe und fertige" Klasse schreibt, um dieses Parsing zu machen?

//rough sketch 
<?php 
class SqlParser() 
{ 
    protected $sqlstr; 
    protected $m_tablenames = array(); 
    protected $m_fieldnames = array(); 

    public function __construct($sql){ 
     $this->sqlstr = $sqlcmd; 
     $this->parseString($sqlstr); 
    } 

    public function __destroy(){} 
    public function getTableNames(){ return m_tablenames; } 
    public function getFieldNames(){ return m_fieldnames; } 

    private function parseString($sql) 
    { 
     //TODO 
    } 
} 

?> 

Ich würde das Parsen bevorzugt SQL-Dialekt Agnostiker (das heißt nicht auf einem bestimmten SQL-Dialekt oder db spezifische SQL gebunden) zu sein, so viel wie möglich.

Wenn das nicht möglich ist, dann ist der SQL-Dialekt, den ich verwenden werde, PostgreSQL.

+0

mögliche Duplikate von [PHP MySQL SQL-Parser (INSERT und UPDATE)] (http://stackoverflow.com/questions/283087/php-mysql-sql-parser-insert-and-update) und [SQL-String parsen] (http://stackoverflow.com/questions/641119/parsing-sql-string) – Gordon

Antwort

2

PHP SQL Parser könnte das sein, was Sie suchen. Es wird ziemlich komplexe Abfragen behandeln, wie Sie aus dem Link sehen können. Laden Sie den Code von der Projektvorderseite herunter. Der einzige Nachteil ist, dass es nur auf MySQL abzielt. Hinzufügen von Unterstützung für PostgreSQL sollte kein großes Problem sein.

Es gibt auch eine grundlegendere Lösung für das SQL-Parsing: PHP SQL Tokenizer, aber es bietet Ihnen nichts anderes als Auswahl/aus/wo/Reihenfolge Trennung: keine Feldnamen, Unterabfrage Extraktion oder dergleichen.

1

Sie könnten cbMySQL einen Versuch geben, ich weiß es nicht sehr gut, aber es könnte das Ding sein, das Sie suchen.

Verwandte Themen