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; }
/** * 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; }
/** * 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. }
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; }
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; }