예제 #1
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;
 }
예제 #2
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;
	}