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

Source for file vmsql.postgres.php

Documentation is available at vmsql.postgres.php

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

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