1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| /**********************************************************************
* Extract the table used in a query
***********************************************************************
* @param $query
* @retrun : array containing the table's name
**********************************************************************/
function ExtractTable($Query){
echo $Query.'<br>';
//DELETE
if (preg_match('#(?:DELETE (?:.*)FROM\s* )(.*)#', $Query, $Substring)){
$Substring = $Substring[1];
if (preg_match('#(.*)(?:USING.*)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:WHERE.*)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:ORDER BY.*)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:LIMIT.*)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)#', $Substring, $resultat)){}
else {
echo 'The query has not been parsed<br>'.$Query.'<br>';
};
}
//INSERT
elseif (preg_match('#(?:INSERT\s+)(?:LOW_PRIORITY|DELAYED)?\s*(?:IGNORE)?\s*(?:INTO)?\s*([\w\s,]*)(?:.*)
//J'ai artificiellement coupe cette ligne pour ne pas trop déformer l'affichage sur le forum
(?:VALUES.*|SELECT.*)#',$Query,$resultat)){}
//LOAD DATA INFILE
elseif (preg_match("#(?:LOAD \s*DATA (?:.*)INFILE (?:.*)INTO TABLE\s*)([a-z0-9_.]*)#",$Query,$resultat)){}
//REPLACE
elseif (preg_match('#(?:REPLACE\s+)(?:LOW_PRIORITY|DELAYED)?\s*(?:INTO)?\s*([\w\s,]*)(?:VALUES.*)#',$Query,$resultat)){}
//UPDATE
elseif (preg_match('#(?:UPDATE\s+(?:LOW_PRIORITY)?\s*(?:IGNORE)?\s*)(.*)(?:SET.*)#', $Query, $resultat)){}
//SELECT
elseif (preg_match('#(?:SELECT (?:.*)FROM \s*)(.*)#', $Query, $Substring)){
$Substring = $Substring[1];
if (preg_match('#(.*)(?:CROSS|INNER|STRAIGHT_JOIN|LEFT.*|NATURAL|RIGHT)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:WHERE)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:GROUP BY)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:HAVING)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:ORDER BY)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:LIMIT)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:PROCEDURE)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:FOR UPDATE|LOCK IN SHARE MODE)#', $Substring, $resultat)){}
elseif (preg_match('#(.*)(?:CROSS|INNER|STRAIGHT_JOIN|LEFT|NATURAL|RIGHT)#', $Substring, $resultat)){}
else {
echo 'The query has not been parsed<br>'.$Query.'<br>';
};
//JOIN
if (preg_match('#(?:JOIN) \s*(.*) (?:ON)#', $Query, $resultat2)){
$resultat[1] .= ','.$resultat2[1];
}
}
//TROUBLE
else {
echo 'The query has not been parsed<br>'.$Query.'<br>';
};
$resultat[1] = ereg_replace(' ', '',$resultat[1]);
return explode(',',$resultat[1]);
} |