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:
- die Feldnamen kontrollieren, die in ‚SELECT die verwendet werden (einschließlich Subqueries)
- die Feldnamen überprüfen, dass werden eingesetzt, in ‚der JOIN (einschließlich Subqueries)
- 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.
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