function spip_pg_trace_query($query, $serveur = '')
{
    $connexion =& $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
    $prefixe = $connexion['prefixe'];
    $link = $connexion['link'];
    $db = $connexion['db'];
    if (isset($_GET['var_profile'])) {
        include_spip('public/tracer');
        $t = trace_query_start();
    } else {
        $t = 0;
    }
    $connexion['last'] = $query;
    $r = spip_pg_query_simple($link, $query);
    if ($e = spip_pg_errno($serveur)) {
        $e .= spip_pg_error($query, $serveur);
    }
    // et du fautif
    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
}
Exemple #2
0
 /**
  * Lancer la requête transmise et faire le tracage si demandé
  *
  * @param string $query
  *     Requête à exécuter
  * @param bool|null $tracer
  *     true pour tracer la requête
  * @return bool|SQLiteResult
  */
 function executer_requete($query, $tracer = null)
 {
     if (is_null($tracer)) {
         $tracer = $this->tracer;
     }
     $err = "";
     $t = 0;
     if ($tracer) {
         include_spip('public/tracer');
         $t = trace_query_start();
     }
     # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
     if ($this->link) {
         // memoriser la derniere erreur PHP vue
         $e = function_exists('error_get_last') ? error_get_last() : "";
         // sauver la derniere requete
         $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
         $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
         if ($this->sqlite_version == 3) {
             $r = $this->link->query($query);
             // sauvegarde de la requete (elle y est deja dans $r->queryString)
             # $r->spipQueryString = $query;
             // comptage : oblige de compter le nombre d'entrees retournees
             // par une requete SELECT
             // aucune autre solution ne donne le nombre attendu :( !
             // particulierement s'il y a des LIMIT dans la requete.
             if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
                 if ($r) {
                     // noter le link et la query pour faire le comptage *si* on en a besoin
                     $r->spipSqliteRowCount = array($this->link, $query);
                 } elseif ($r instanceof PDOStatement) {
                     $r->spipSqliteRowCount = 0;
                 }
             }
         } else {
             $r = sqlite_query($this->link, $query);
         }
         // loger les warnings/erreurs eventuels de sqlite remontant dans PHP
         if ($err = function_exists('error_get_last') ? error_get_last() : "" and $err != $e) {
             $err = strip_tags($err['message']) . " in " . $err['file'] . " line " . $err['line'];
             spip_log("{$err} - " . $query, 'sqlite.' . _LOG_ERREUR);
         } else {
             $err = "";
         }
     } else {
         $r = false;
     }
     if (spip_sqlite_errno($this->serveur)) {
         $err .= spip_sqlite_error($query, $this->serveur);
     }
     return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
 }
Exemple #3
0
/**
 * Insère une ligne dans une table 
 *
 * @param string $table
 *     Nom de la table SQL
 * @param string $champs
 *     Liste des colonnes impactées,
 * @param string $valeurs
 *     Liste des valeurs,
 * @param array $desc
 *     Tableau de description des colonnes de la table SQL utilisée
 *     (il sera calculé si nécessaire s'il n'est pas transmis).
 * @param string $serveur
 *     Nom du connecteur
 * @param bool $requeter
 *     Exécuter la requête, sinon la retourner
 * @return bool|string|int|array
 *     - int|true identifiant de l'élément inséré (si possible), ou true, si réussite
 *     - Texte de la requête si demandé,
 *     - False en cas d'erreur,
 *     - Tableau de description de la requête et du temps d'exécution, si var_profile activé
**/
function spip_mysql_insert($table, $champs, $valeurs, $desc = array(), $serveur = '', $requeter = true)
{
    $connexion =& $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
    $prefixe = $connexion['prefixe'];
    $link = $connexion['link'];
    $db = $connexion['db'];
    if ($prefixe) {
        $table = preg_replace('/^spip/', $prefixe, $table);
    }
    $query = "INSERT INTO {$table} {$champs} VALUES {$valeurs}";
    if (!$requeter) {
        return $query;
    }
    if (isset($_GET['var_profile'])) {
        include_spip('public/tracer');
        $t = trace_query_start();
    } else {
        $t = 0;
    }
    $connexion['last'] = $query;
    #spip_log($query, 'mysql.'._LOG_DEBUG);
    $r = false;
    if (mysqli_query($link, $query)) {
        $r = mysqli_insert_id($link);
    } else {
        if ($e = spip_mysql_errno($serveur)) {
            // Log de l'erreur eventuelle
            $e .= spip_mysql_error($query, $serveur);
        }
        // et du fautif
    }
    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
}
Exemple #4
0
function spip_array_query($query, $serveur='') {

	$connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
	$prefixe = $connexion['prefixe'];
	$link = $connexion['link'];
	$db = $connexion['db'];

	$t = !isset($_GET['var_profile']) ? 0 : trace_query_start();
	$r = array_query($query,$db);

	if ($e = spip_array_errno())	// Log de l'erreur eventuelle
		$e .= spip_array_error($query); // et du fautif
	return $t ? trace_query_end(var_export($query,true), $t, $r, $e) : $r;
}
Exemple #5
0
	function executer_requete(){
		$err = "";
		if ($this->tracer) {
			include_spip('public/tracer');
			$t = trace_query_start();
		} else $t = 0 ;
 
# spip_log("requete: $this->serveur >> $this->query",'query'); // boum ? pourquoi ?
		if ($this->link){
			// memoriser la derniere erreur PHP vue
			$e = error_get_last();
			// sauver la derniere requete
			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $this->query;
			
			if ($this->sqlite_version == 3) {
				$r = $this->link->query($this->query);
				// sauvegarde de la requete (elle y est deja dans $r->queryString)
				# $r->spipQueryString = $this->query;

				// comptage : oblige de compter le nombre d'entrees retournees 
				// par une requete SELECT
				// aucune autre solution ne donne le nombre attendu :( !
				// particulierement s'il y a des LIMIT dans la requete.
				if (strtoupper(substr(ltrim($this->query),0,6)) == 'SELECT'){
					if ($r) {
						$l = $this->link->query($this->query);
						$r->spipSqliteRowCount =  count($l->fetchAll());
						unset($l);
					} elseif (is_a($r, 'PDOStatement')) {
						$r->spipSqliteRowCount = 0;
					}
				}
			} else {
				$r = sqlite_query($this->link, $this->query);
			}

			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
			if ($err = error_get_last() AND $err!=$e) {
				$err = strip_tags($err['message'])." in ".$err['file']." line ".$err['line'];
				spip_log("$err - ".$this->query, 'sqlite');
			}
		  else $err="";

		} else {
			$r = false;	
		}

		if (spip_sqlite_errno($serveur))
			$err .= spip_sqlite_error($this->query, $serveur);
		return $t ? trace_query_end($this->query, $t, $r, $err, $serveur) : $r;
	}