2009-03-13 10 views
3

Quelle est une bonne méthode pour analyser une chaîne sql dans ses composants séparés. Je ai essayé avec une regex, mais je ne peux pas le faire fonctionner correctement.Analyse de la chaîne SQL

Say par exemple:

"SELECT * FROM tbl WHERE user_id > 50" 

créeraient un tableau avec tous les composants

$arr[0] = "SELECT"; 
$arr[1] = "*"; 
$arr[2] = "FROM"; 

ect ...

Merci

Répondre

4

Je vais pour une sql parser qui pourrait être intégré à votre langue: ne pas réinventer la roue.

Je n'en ai pas utilisé un en particulier à recommander, mais je suis sûr que vous pouvez en trouver un qui fait ce dont vous avez besoin.

Voir les documents connexes: PHP MySQL SQL parser (INSERT and UPDATE)

3

La syntaxe complète d'une instruction SQL SELECT est très complexe. Je pense que vous voudrez peut-être vous limiter à un sous-ensemble.

2

L'analyse correcte et complète de SQL est difficile. Vous pouvez utiliser gratuitement une boîte à outils de générateur d'analyse syntaxique comme ANTLR avec une «grammaire» SQL. Pour le coût, je sais que Visual Studio Team System 2008 Database Edition inclut un analyseur SQL.

3

Une expression régulière peut analyser uniquement un regular language. Autrement dit, un langage qui peut être exprimé avec une machine à états finis.

La plupart des langages de programmation, y compris SQL, ne peuvent pas être exprimés en tant que langage régulier et ne peuvent donc pas être analysés avec des expressions régulières. Même faire des tâches limitées comme la séparation d'expressions SQL va être terriblement difficile avec des expressions régulières.

Vous aurez besoin d'utiliser un générateur d'analyse syntaxique plus robuste capable de gérer des grammaires plus complexes. Vous étiquetez votre question avec PHP, vous devriez donc regarder dans Lime.

Vous devrez également trouver un fichier de grammaire pour PHP compatible avec le générateur d'analyseur que vous choisissez. Je ne sais pas où en trouver un pour PHP et Lime, mais il y a un pur projet Perl appelé DBIx::MyParsePP qui est basé sur la grammaire de MySQL.

0

L'exemple que vous avez montré, est un code qui lira votre instruction SQL et tokenize avec espace entre et stocker chaque jeton dans le tableau. Si vous recherchez tel le pice de code, vous pouvez faire cela avec des fonctions intermédiaires en php: http://ca.php.net/split

Cordialement,
pooria.