Carnet Wiki

mysql_to_spip

Cette fonction analyse une requête SQL simple pour en extraire les paramètres select, from etc utiles pour les fonctions de l’API sql de SPIP. L’index ’explain’ donne l’explication du résultat sous la forme d’un HTML.

Ça marche bien pour les requêtes SQL simples et pour une part de requêtes moyennement complexes.

// Auteur : JLuc

// Nettoie la query des caractères en trop
function nettoie_query ($str) {
	$rep = array("\r\n", "\n", "\r", "\t");
	$rep = str_replace ($rep, " ", $str);
        return preg_replace("/\s+", ' ', $rep);
}

// Calcule les parametres de la query pour l'API sql_ de SPIP
function mysql_to_spip ($my_query, $special) {
	$my_query = nettoie_query ($my_query);

	if (!preg_match ("/SELECT\b(.*)\bFROM\b(.*)\bWHERE\b(.*)(\bGROUP BY\b(.*))?(\bORDER BY\b(.*))?$/imuU", $my_query, $matches))
		return null;

	$select= $matches[1];
	// vu la regexp ya toujours un where
	$where = $matches[3];

	$found = array(
		'query' => $my_query,
		'select' => $select,
		'from' => ($from = $matches[2]),
		'where' => $where,
		'group_by' => ($groupby = (isset ($matches[5]) ? $matches[5] : '')),
		'order_by' => ($orderby = (isset ($matches[7]) ? $matches[7] : '')),
		'explain' => "SELECT: ".$select
				."<br>FROM: ".$from
				."<br>WHERE: ".$where
				."<br>GROUP BY: ".$groupby
				."<br>ORDER BY: ".$orderby
		);
	return $found;
};
JLuc - Mise à jour :18 mars 2019 à 18h52min