en | fr  | Contact  | Print  | Share

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 
'';
}


© 2010-2015 by ToolOscope SASU. © 2016-2018 by Arnaud De Rette. All rights reserved