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 * 1000, 1) . ' 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 * 1000, 1) . ' 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 '';
}