FrameBeurk File
Fmbk/Module/mysql_layer.php
<?php //FrameBeurk V0.65 Copyright ToolOscope 2016. Licence CeCILL-C.
$TRANSAC['Db']['NbRequetes'] = 0;
$TRANSAC['Db']['Duree'] = 0.;
//------------------------ fonctions générales --------------------------------
function db_CONNECT($server, $User, $password, $database) { // connexion à la db
$dbLink = mysql_connect($server, $User, $password) or die('Connexion impossible : ' . mysql_error());
mysql_select_db($database, $dbLink) or die('DB injoignable : ' . mysql_error()); // sélection de la database
//mysql_set_charset('utf8', $dbLink); // sélection du jeu de caractères
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $dbLink);
return $dbLink;
}
function db_FREE($result) { // libération ressource
return mysql_free_result($result);
}
function db_QUERY($requete, $directive = '') { // execution d'une requete
global $TRANSAC;
//si c'est une requête tableau
if (is_array($requete))
$requete = db_recomposeTabQuery($requete, $directive);
$TRANSAC['Db']['NbRequetes'] += 1;
$tsDeb = microtime(true);
$result = mysql_query($requete, $TRANSAC['Db']['Courante']);
$TRANSAC['Db']['Duree'] += ($duree = microtime(true) - $tsDeb);
// logue les requetes de la transaction
if ($CONFIG['Param']['LogSQLTransac'])
$TRANSAC['RequetesSQL'][] = array($requete, $duree, (($result) ? $result : mysql_error($TRANSAC['Db']['Courante'])));
elseif (! $result) // si erreur d'exécution et requêtes non sorties en log
echo 'Invalid query (' . mysql_error($TRANSAC['Db']['Courante']) . ') : <br />' . $requete . '<br />';
return $result;
}
function db_ESCAPE($chaine) {
global $TRANSAC;
return mysql_real_escape_string($chaine, $TRANSAC['Db']['Courante']);
}
//------------------------ fonctions de lecture --------------------------------
function db_FETCH_ROW($result) { // lecture de la ligne suivante du résultat
return mysql_fetch_row($result);
}
function db_FETCH_ASSOC($result) { // lecture de la ligne suivante du résultat
return mysql_fetch_assoc($result);
}
function db_NB_SELECTED($result) { // nombre de lignes retournées
return mysql_num_rows($result);
}
function db_NB_SELECTED_TOTAL() { // nombre total de lignes sélectionnée (sans clause LIMIT)
global $TRANSAC;
if (list($nbLignes) = mysql_fetch_row(mysql_query('SELECT FOUND_ROWS()', $TRANSAC['Db']['Courante']))) // nécessite d'avoir positionné la directive 'SQL_CALC_FOUND_ROWS' dans le SELECT
return $nbLignes;
else return 0;
}
function db_POS($result, $pos) { // positionne le curseur à un numéro de ligne
return mysql_data_seek($result, $pos);
}
//------------------------ fonctions de mise à jour --------------------------------
/*function db_INSERT($requete) { // execution d'une requete d'insertion
global $TRANSAC;
return mysql_query($requete, $TRANSAC['Db']['Courante']);
} */
function db_NEW_ID($noCompteur) { //renvoie la prochaine Id libre à utiliser pour une insertion
db_QUERY("CALL Beurk_creeId('$noCompteur', @newId);");
$result = db_QUERY('SELECT @newId;');
list($newId) = db_FETCH_ROW($result);
db_FREE($result);
return $newId;
}
function db_INSERT_ID() { // récupération de l'ID d'insertion
global $TRANSAC;
return mysql_insert_id($TRANSAC['Db']['Courante']);
}
/* function db_UPDATE($requete) { // execution d'une requete de mise à jour
global $TRANSAC;
return mysql_query($requete, $TRANSAC['Db']['Courante']);
}
function db_DELETE($requete) { // execution d'une requete de suppression
global $TRANSAC;
return mysql_query($requete, $TRANSAC['Db']['Courante']);
} */
function db_NB_AFFECTED() { // récupération du nombre de lignes impactées
global $TRANSAC;
return mysql_affected_rows($TRANSAC['Db']['Courante']);
}
//------------------------------------ Gestion des requêtes DB --------------------------------------------
//recompose une requête sql à partir d'un tableau-requête
function db_recomposeTabQuery($tabQuery, $directive = '') {
$requete = '';
if (isset($tabQuery['SELECT'])) { // SELECT
$requete .= ' SELECT ' . (($directive != '') ? ($directive . ' ') : '');
if (is_array($tabQuery['SELECT'])) {
$suite = '';
foreach($tabQuery['SELECT'] as $surnom => $colonne) {
$requete .= $suite . ((is_numeric($surnom)) ? $colonne : $colonne . ' AS ' . $surnom);
$suite = ', ';
}
} else
$requete .= $tabQuery['SELECT'];
if (isset($tabQuery['FROM']))
$requete .= ' FROM ' . $tabQuery['FROM'];
if (isset($tabQuery['WHERE']))
$requete .= ' WHERE ' . $tabQuery['WHERE'];
if (isset($tabQuery['GROUP BY']))
$requete .= ' GROUP BY ' . $tabQuery['GROUP BY'];
if (isset($tabQuery['HAVING']))
$requete .= ' HAVING ' . $tabQuery['HAVING'];
if (isset($tabQuery['ORDER BY']))
$requete .= ' ORDER BY ' . $tabQuery['ORDER BY'];
if (isset($tabQuery['LIMIT']))
$requete .= ' LIMIT ' . $tabQuery['LIMIT'];
} elseif (isset($tabQuery['UPDATE'])) { // UPDATE
$requete .= ' UPDATE ' . $tabQuery['UPDATE'];
if (isset($tabQuery['SET'])) {
$requete .= ' SET ';
if (is_array($tabQuery['SET'])) {
$suite = '';
foreach($tabQuery['SET'] as $colonne => $valeur) {
$requete .= $suite . $colonne . "='" . $valeur . "'";
$suite = ', ';
}
} else
$requete .= $tabQuery['SET'];
}
if (isset($tabQuery['WHERE']))
$requete .= ' WHERE ' . $tabQuery['WHERE'];
} elseif (isset($tabQuery['INSERT'])) { // INSERT
$requete .= ' INSERT INTO ' . $tabQuery['INSERT'];
if (isset($tabQuery['VALUES'])) {
if (is_array($tabQuery['VALUES'])) {
$requete .= " ("; // liste des colonnes
$suite = '';
foreach($tabQuery['VALUES'] as $colonne => $valeur) {
$requete .= $suite . $colonne;
$suite = ', ';
}
$requete .= ") VALUES ("; // liste des valeurs
$suite = '';
foreach($tabQuery['VALUES'] as $colonne => $valeur) {
$requete .= $suite . "'" . $valeur . "'";
$suite = ', ';
}
$requete .=')';
} else
$requete .= $tabQuery['VALUES'];
}
} else {
var_dump($tabQuery);
die('TabQuery mal formatée --> arrêt du programme');
}
// echo "\n<!-- $requete -->\n";
return $requete;
}
//ajoute une condition avec AND
function db_AND($where, $ajoutWhere) {
return (($where == '') ? $ajoutWhere : ($where . ' AND ' . $ajoutWhere));
}
//gère la pagination
function db_pagineRequete(&$requete, $offset, $limite) {
if (is_array($requete)) {
$requete['LIMIT'] = $offset . ', ' . $limite;
$requete['DIRECTIVE'] = 'SQL_CALC_FOUND_ROWS'; // ajout de la directive qui va permettre d'utiliser db_NB_SELECTED_TOTAL()
} else
$requete .= ' LIMIT ' . $offset . ', ' . $limite;
return $requete;
}
//------------------------------------ Sortie des requêtes DB --------------------------------------------
function db_logRequetes() {
global $TRANSAC, $CONFIG;
if ($CONFIG['Param']['LogSQLTransac'] && isset($TRANSAC['RequetesSQL'])) {
$message = '<table class="RequetesSQL">';
foreach ($TRANSAC['RequetesSQL'] as $noReq => $dataReq)
$message .= '<tr><td>' . $noReq . '</td><td>' . $dataReq[0] . '</td><td>' . $dataReq[1] . '</td><td>' . $dataReq[2] . '</td></tr>';
$message .= '</table>';
return $message;
}
return '';
}