preg_match_all

peeed

Grünschnabel
Moin!

Ich habe einen String, in dem mehrere sql-statements stehen. Den wollte ich jetzt mit preg_match_all so splitten, dass er überall, wo anweisungen beginnen, getrennt wird. Mein Ansatz dazu ist:
preg_match_all('/(insert|update|select|delete|INSERT|UPDATE|SELECT|DELETE).*/i', $anweisung, $found);

Das Ergebnis-array erwarte ich hier: $statements = $found[0];

Wenn ich jetzt $statements[0] abrufe bekomme ich aber nur den String als Ergebnis zurück. Kann mir bitte jemand helfen?
 
Da SQL-Statements untereinander durch Semikolons abgetrennt werden, könntest du Folgendes benutzen:
PHP:
<?php

	if( strstr($query, ';') && $tmp = preg_split('/;(\x0D\x0A|\x0A|\x0D)/', $query, -1, PREG_SPLIT_NO_EMPTY) ) {
		…
	}

?>
Dazu muss jedoch nach jedem trennenden Seikolon ein Zeilenumbruch gesetzt werden.
 
Das Ganze dient einer Dokumentation für ein grosses Projekt. In diesem Projekt sind leider nicht alle sql-Anweisungen mit einem Semikolon abgeschlossen, dass ist das grosse Problem. Deshalb muss ich leider den Umweg über die Befehler gehen.
 
Ich durchsuche den Code einer php-Datei. Da stehen dann zwischen 0 und ca.80 Anweisungen drin. Manche Anweisungen sind über mehrere Zeilen angelegt und mit .= verbunden. ($sql = "SELECT * FROM table "; $sql .= "WHERE id='2';"; )
Über den Tokenizer lese ich alle Variableninhalte aus, die zu sql-Variablen gehören und füge diese in einen String. Der soll dann wiederum gesplittet werden. Ich füge alle strings zusammen, damit ich während des Auslesens nicht unterscheiden muss, von welcher Variablen welcher string kommt.
 
Zurück