en | fr  | Contact  | Print  | Share

FrameBeurk File

Fmbk/Module/mysqli_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 mysqli_connect($server$User$password$database);
    
mysqli_set_charset($dbLink'utf8');                                    // sélection du jeu de caractères
    
return $dbLink;
}

function 
db_FREE($result) {                                                // libération ressource
    
return mysqli_free_result($result);
}

function 
db_QUERY($requete$directive '') {                            // execution d'une requete
    
global $TRANSAC$CONFIG;
    
//si c'est une requête tableau
    
if (is_array($requete))
        
$requete db_recomposeTabQuery($requete$directive);

    
$TRANSAC['Db']['NbRequetes'] += 1;
    
$tsDeb microtime(true);
    
$result mysqli_query($TRANSAC['Db']['Courante'], $requete);
    
$TRANSAC['Db']['Duree'] += ($duree microtime(true) - $tsDeb);

    
// logue les requetes de la transaction
    
if ($CONFIG['Param']['LogSQLTransac'])
        
$TRANSAC['RequetesSQL'][] = array($requete, (round($duree 10001) . '&nbsp;ms'), (($result) ? 'OK' mysqli_error($TRANSAC['Db']['Courante'])));

    elseif (! 
$result)                                            // si erreur d'exécution et requêtes non sorties en log
        
echo 'Invalid query (' mysqli_error($TRANSAC['Db']['Courante']) . ') : <br />' $requete '<br />';
        
    return 
$result;
}

function 
db_MULTI_QUERY($requete) {                                // execution de plusieurs requetes
    
global $TRANSAC;
    
//pas de requête tableau ici
    
if (is_array($requete))
        die(
'Requêtes tableaux interdites dans db_MULTI_QUERY');

    
$TRANSAC['Db']['NbRequetes'] += 1;
    
$tsDeb microtime(true);
    
$result mysqli_multi_query($TRANSAC['Db']['Courante'], $requete);
    
$TRANSAC['Db']['Duree'] += ($duree microtime(true) - $tsDeb);
    if (! 
$result)
        echo 
'Invalid multi_query (' mysqli_error($TRANSAC['Db']['Courante']) . ') : <br />' $requete '<br />';
    
    
// logue les requetes de la transaction (durées en ms)
    
if ($CONFIG['Param']['LogSQLTransac'])
        
$TRANSAC['RequetesSQL'][] = array($requete, (round($duree 10001) . '&nbsp;ms'), (($result) ? 'OK' mysqli_error($TRANSAC['Db']['Courante'])));

    return 
$result;
}

function 
db_ESCAPE($chaine) {
    global 
$TRANSAC;
    return 
mysqli_real_escape_string($TRANSAC['Db']['Courante'], $chaine);
}

//------------------------ fonctions de lecture --------------------------------

function db_FETCH_ROW($result) {                                            // lecture de la ligne suivante du résultat
    
return mysqli_fetch_row($result);
}

function 
db_FETCH_ASSOC($result) {                                            // lecture de la ligne suivante du résultat
    
return mysqli_fetch_assoc($result);
}

function 
db_NB_SELECTED($result) {                                        // nombre de lignes retournées
    
return mysqli_num_rows($result);
}

function 
db_NB_SELECTED_TOTAL() {                                        // nombre total de lignes sélectionnée (sans clause LIMIT)
    
global $TRANSAC;
    if (list(
$nbLignes) = mysqli_fetch_row(mysqli_query($TRANSAC['Db']['Courante'], 'SELECT FOUND_ROWS()')))
        return 
$nbLignes;                                                // nécessite d'avoir positionné la directive 'SQL_CALC_FOUND_ROWS' dans le SELECT
    
else return 0;
}

function 
db_POS($result$pos) {                                        // positionne le curseur à un numéro de ligne
    
return mysqli_data_seek($result$pos);
}

//------------------------ fonctions de mise à jour --------------------------------
/*function db_INSERT($requete) {                                        // execution d'une requete d'insertion
    global $TRANSAC;
    return mysqli_query($TRANSAC['Db']['Courante'], $requete);
} */

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;

/*    $result = db_MULTI_QUERY("CALL Beurk_creeId($noCompteur, @newId); SELECT @newId;");
    list($newId) = db_FETCH_ROW($result);    //faire un     if ($result=mysqli_store_result($con)) avant !!!
    db_FREE($result);
    return $newId;    */
}

function 
db_INSERT_ID() {                                                // récupération de l'ID d'insertion (cas auto-increment)
    
global $TRANSAC;
    return 
mysqli_insert_id($TRANSAC['Db']['Courante']);
}

/* function db_UPDATE($requete) {                                        // execution d'une requete de mise à jour
    global $TRANSAC;
    return mysqli_query($TRANSAC['Db']['Courante'], $requete);
}

function db_DELETE($requete) {                                            // execution d'une requete de suppression
    global $TRANSAC;
    return mysqli_query($TRANSAC['Db']['Courante'], $requete);
} */

function db_NB_AFFECTED() {                                                // récupération du nombre de lignes impactées
    
global $TRANSAC;
    return 
mysqli_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