phpDocumentor VFront
DB-Libraries
[ class tree: VFront ] [ index: VFront ] [ all elements ]

Source for file vmsql.mysqli.php

Documentation is available at vmsql.mysqli.php

  1. <?php
  2. /**
  3. * LIBRERIA SQL per MySQL(i) con gestione errori ed altre utility
  4. @package VFront
  5. @subpackage DB-Libraries
  6. @author Mario Marcello Verona <marcelloverona@gmail.com>
  7. @copyright 2007 Mario Marcello Verona
  8. @version 0.90
  9. @see vmsql.postgres.php
  10. @license http://www.gnu.org/licenses/gpl.html GNU Public License
  11. */
  12.  
  13.  
  14.  
  15.  
  16. /**
  17.  * @desc Esegue una query $sql
  18.  * @param string $sql 
  19.  * @param object $link_db 
  20.  * @param bool $transazione 
  21.  * @return object 
  22.  */
  23. function vmsql_query($sql,$link_db,$transazione=false){
  24.  
  25.     if($GLOBALS['DEBUG_SQL']$GLOBALS['DEBUG_SQL_STRING'][$sql;
  26.  
  27.     $obj @mysqli_query($link_db,$sql,MYSQLI_STORE_RESULTor vmsql_error($sql,mysqli_error($link_db),$transazione,$link_db);
  28.     
  29.     return $obj;
  30.     
  31.  
  32.     /*else {
  33.         vmsql_error($sql,"Link al DB non disponibile",$transazione,$link_db);
  34.         return false;
  35.     }*/
  36. }
  37.  
  38.  
  39. /**
  40.  * Esegue una query $sql  e restisce vero|falso a seconda dell'esito
  41.  * il secure_mode (di default) permette l'uso di sole query SELECT.
  42.  * Se l'sql contiene errori la funzione restituisce false, ma l'esecuzione prosegue.
  43.  *
  44.  * @param string $sql 
  45.  * @param object $link_db 
  46.  * @param bool $secure_mode 
  47.  * @return bool 
  48.  */
  49. function vmsql_try($sql,$link_db,$secure_mode=true,$prendi_errorn=false){
  50.     
  51.     $sql=trim(str_replace(array("\n","\r")," ",$sql));
  52.     
  53.     if($secure_mode){
  54.         // piccolo accorgimento per la sicurezza...
  55.         if(!preg_match("'^SELECT 'i",$sql)) return 0;    
  56.         $sql=preg_replace("'([\W](UPDATE)|(DELETE)|(INSERT)|(DROP)|(ALTER)|(UNION)[\W])|;'ui","",$sql);
  57.     }
  58.     
  59.     if(is_object($link_db)){
  60.         $res @mysqli_query($link_db,$sql);
  61.         if($res@mysqli_free_result($res);
  62.         
  63.     }
  64.     
  65.     // se si vuole intercettare l'eventuale codice errore
  66.     if($prendi_errorn){
  67.         $errn @mysqli_errno($link_db);
  68.         
  69.         if($errn>0){
  70.             $fp=@fopen("./rpc.debug.txt","a");
  71.             fwrite($fp,date("Y-m-d H:i:s")." --- $errn ---".@mysqli_error($link_db)."\n");
  72.             fclose($fp);
  73.             return $errn;
  74.         }
  75.     }
  76.     
  77.     return ($res1:0;
  78. }
  79.  
  80.  
  81. /**
  82.  * @desc Funzione di fetch_row
  83.  * @return array 
  84.  * @param resource $res 
  85. */
  86. function vmsql_fetch_row(&$res){
  87.  
  88.     if(is_object($res)){
  89.  
  90.         $RS@mysqli_fetch_row($res);
  91.         if($RSreturn $RS;
  92.         else return false;
  93.  
  94.     }
  95.  
  96.  
  97. }
  98.  
  99. /**
  100.  * @desc Funzione di fetch_assoc
  101.  * @return array 
  102.  * @param resource $res 
  103. */
  104. function vmsql_fetch_assoc(&$res){
  105.  
  106.     if(is_object($res)){
  107.  
  108.         $RS@mysqli_fetch_assoc($res);
  109.         if($RSreturn $RS;
  110.         else return false;
  111.  
  112.     }
  113.  
  114.  
  115. }
  116.  
  117.  
  118. /**
  119.  * @desc Funzione di fetch_array
  120.  * @return array 
  121.  * @param resource $res 
  122. */
  123. function vmsql_fetch_array(&$res){
  124.  
  125.     if(is_object($res)){
  126.  
  127.         $RS@mysqli_fetch_array($res);
  128.         if($RSreturn $RS;
  129.         else return false;
  130.  
  131.     }
  132.  
  133.  
  134. }
  135.  
  136.  
  137. /**
  138.  * @desc Funzione di num_rows
  139.  * @return array 
  140.  * @param resource $res 
  141. */
  142. function vmsql_num_rows(&$res){
  143.  
  144.     if(is_object($res)){
  145.         return @mysqli_num_rows($res);
  146.         
  147.     }
  148. }
  149.  
  150.  
  151. /**
  152.  * @desc  Funzione di insert ID che restituisce l'ultimo ID autoincrement inserito (MySQL)
  153.  * @param resource $res 
  154.  * @param string $tablename Per compatibilità con Postgres
  155.  * @param string $fieldname Per compatibilità con Postgres
  156.  * @return int 
  157. */
  158. function vmsql_insert_id($link,$tablename=null,$fieldname=null){
  159.  
  160.     if(is_object($link)){
  161.         return mysqli_insert_id($link);
  162.     }
  163.     else{
  164.         return null;
  165.     }
  166. }
  167.  
  168.  
  169.  
  170. /**
  171.  * @desc Funzione di affected_rows
  172.  * @return int 
  173.  * @param resource $link 
  174.  * @param resource $query Per compatibilità con Postgres
  175. */
  176. function vmsql_affected_rows($link,$query){
  177.  
  178.     
  179.     if(is_object($link)){
  180.         return @mysqli_affected_rows($link);
  181.         
  182.     }
  183.  
  184. }
  185.  
  186.  
  187.  
  188.  
  189. /**
  190.  * @desc Funzione di num_fields
  191.  * @return int 
  192.  * @param string $dbname 
  193. */
  194. function vmsql_num_fields($dbname){    
  195.     
  196.     return @mysqli_num_fields($dbname);
  197.  
  198. }
  199.  
  200.  
  201. /**
  202.  * @desc Funzione di free_result
  203.  * @return void 
  204.  * @param string $result 
  205. */
  206. function vmsql_free_result($result){
  207.     
  208.     mysqli_free_result($result);
  209. }
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216. #########################################################################################
  217. #
  218. #
  219. #    FUNZIONI DI ELABORAZIONE
  220. #
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227. /**
  228.  * @return array (matrice)
  229.  * @param resource $res 
  230.  * @desc Funzione utility di fetch_assoc che restituisce tutta la matrice dei risultati
  231. */
  232. function vmsql_fetch_assoc_all(&$res$reverse=false){
  233.  
  234.     if(is_object($res)){
  235.         
  236.         $matrice=array();
  237.  
  238.         while($RSvmsql_fetch_assoc($res)) $matrice[]=$RS;
  239.         
  240.         vmsql_free_result($res);
  241.         
  242.         if($reverse
  243.             return vmsql_reverse_matrix($matrice);
  244.         
  245.         else
  246.             return $matrice;
  247.         
  248.     }
  249. }
  250.  
  251.  
  252.  
  253.  
  254. /**
  255.  * @return  matrix 
  256.  * @param matrix $matrix 
  257.  * @desc restituisce una traslata della matrice partendo da indici numerici
  258. */
  259. function vmsql_reverse_matrix($matrix){
  260.  
  261.     if(!is_array($matrix)) return false;
  262.     
  263.     $keys array_keys($matrix[0]);
  264.     
  265.     for($i=0;$i<count($matrix);$i++){
  266.         
  267.         for($j=0;$j<count($keys);$j++)    $rev[$keys[$j]][$i$matrix[$i][$keys[$j]];
  268.     }
  269.     
  270.     return $rev;
  271. }
  272.  
  273.  
  274. /**
  275.  * @return resource 
  276.  * @param resource $res 
  277.  * @desc Funzione utility di fetch_row che restituisce tutta la matrice dei risultati
  278. */
  279. function vmsql_fetch_row_all(&$res,$reverse=false){
  280.  
  281.     if(is_object($res)){
  282.  
  283.         while($RSvmsql_fetch_row($res)) $matrice[]=$RS;
  284.         
  285.         vmsql_free_result($res);
  286.         
  287.         if($reverse
  288.             return vmsql_reverse_matrix($matrice);
  289.                     
  290.         else
  291.             return $matrice;
  292.         
  293.     }
  294. }
  295.  
  296.  
  297. /**
  298.  * Funzione che recupera le informazioni sui campi di una tabella data
  299.  *
  300.  * @param string $tabella 
  301.  * @param resource $link_db 
  302.  * @return array 
  303.  */
  304. /*function vmsql_fields($tabella,$link_db){
  305.     
  306.     $res = vmsql_query("SELECT * FROM $tabella LIMIT 1",$link_db);
  307.     $i = @pg_num_fields($res);
  308.     for ($j = 0; $j < $i; $j++) {
  309.        $fieldname = @pg_field_name($res, $j);
  310.        $tab_fields[$fieldname]=@pg_field_type($res, $j);
  311.     }
  312.     
  313.     return $tab_fields;
  314. }*/
  315.  
  316.  
  317. /**
  318.  *  Recupera informazioni dal file e dalla query ed apre la funzione openError del file design/layouts.php dove cancella il buffer e manda a video l'errore codificato
  319.  * 
  320.  * @return void 
  321.  * @param string $sql 
  322.  * @param string $message 
  323.  * @desc Handler degli errori per le query.
  324. */
  325. function vmsql_error($sql$message$transazione=false$link_db=false){
  326.     
  327.  
  328.     global $file_DB_error_log;
  329.     
  330.     $GLOBALS['VMSQL_ERROR']=true;
  331.     
  332.     if($transazione){
  333.         vmsql_rollback($link_db);
  334.     }
  335.     
  336.     // se è impostato il DEBUG si ferma qui.
  337.     if($GLOBALS['DEBUG_SQL']return vmsql_error_debug($sql,$message);
  338.     
  339.     
  340.     // prende il tipo query (SELECT , INSERT, UPDATE, DELETE) se il tipo è diverso ahi ahi
  341.     $tipo_query substr(trim($sql)strpos(trim($sql)," "));
  342.     
  343.     
  344.     // restituisci la query che ha dato errore
  345.     $sql_una_linea str_replace(array("\n","\t")," ",$sql);
  346.     $sql_una_linea trim(preg_replace("'[ ]+'"," ",$sql_una_linea));
  347.     
  348.     
  349.     // Scrittura del file di errore
  350.  
  351.     
  352.     $dascriveredate("Y-m-d H:i:s")."\t"
  353.                 . realpath(basename($_SERVER['PHP_SELF'])) "\t"
  354.                 . $_SERVER['HTTP_HOST']" (".$_SERVER['SERVER_ADDR']")\t"
  355.                 . $_SESSION['sessid'"\t"
  356.                 . "Errore in ".$tipo_query "\t"
  357.                 . $linea_err "\t"
  358.                 . $message "\t"
  359.                 . $sql_una_linea"\n";
  360.     
  361.     
  362.     $fp=fopen($file_DB_error_log,"a");
  363.     fwrite($fp,$dascrivere);
  364.     fclose($fp);
  365.     
  366.     
  367.     if(!function_exists('openError')){
  368.     
  369.         include_once(FRONT_REALPATH."/inc/layouts.php");
  370.     
  371.     }
  372.     // richiamo la funzione openError
  373.     openError($tipo_querystr_replace("\t","\n",$dascrivere));
  374.     exit;
  375.     
  376. }
  377.     
  378.  
  379. /**
  380.  * Questa funzione viene eseguita da {@link vmsql_query} qualora il debug sia attivato
  381.  * @desc Funzione che restituisce a video l'SQL che ha generato l'errore
  382.  * @param unknown_type $sql 
  383.  * @param unknown_type $message 
  384.  */
  385. function vmsql_error_debug($sql,$message=""){
  386.  
  387.     echo "<pre>Errore su: ".$sql."\n".$message."</pre>";
  388. }
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396. // FUNZIONI DI TRANSAZIONE
  397.  
  398.  
  399. /**
  400.  * @desc Funzione di transazione che corrisponde ad un BEGIN
  401.  * @param resource $link_db 
  402.  */
  403. function vmsql_begin($link_db){
  404.     
  405.     mysqli_autocommit($link_dbFALSE);
  406. }
  407.  
  408. /**
  409.  * @desc Funzione di transazione di ROLLBACK
  410.  * @param resource $link_db 
  411.  */
  412. function vmsql_rollback($link_db){
  413.     
  414.     mysqli_rollback($link_db);
  415. }
  416.  
  417.  
  418. /**
  419.  * @desc Funzione di transazione di COMMIT
  420.  * @param resource $link_db 
  421.  */
  422. function vmsql_commit($link_db){
  423.     
  424.     mysqli_commit($link_db);
  425. }
  426.  
  427.  
  428.  
  429.  
  430.  
  431. /**
  432.  * Funzione di utilità
  433.  * Testa l'esistenza di un $valore (di solito l'ID) nel $campo di una $tabella,
  434.  * con eventuali clausole $and
  435.  *
  436.  * @param resource $link_db 
  437.  * @param string $campo 
  438.  * @param mixed $valore_id 
  439.  * @param string $tabella 
  440.  * @param string $and 
  441.  * @return bool 
  442.  */
  443. function vmsql_test_id($link_db,$campo,$valore_id,$tabella,$and="",$secure_test=false){
  444.     
  445.     $sql"SELECT * FROM $tabella WHERE $campo=$valore_id $and";
  446.     
  447.     if($secure_test){
  448.         if(vmsql_try($sql,$link_db)){
  449.             $q=vmsql_query($sql,$link_db);
  450.             
  451.             return (vmsql_num_rows($q)>0true:false;
  452.         }
  453.         else return null;
  454.     }
  455.     else{
  456.     
  457.         $q=vmsql_query($sql,$link_db);
  458.         return (vmsql_num_rows($q)>0true:false;
  459.     }
  460. }
  461.  
  462. ?>

Documentation generated on Sat, 22 Sep 2007 11:51:45 +0200 by phpDocumentor 1.4.0a2