$DB = array(); function db_q3($query) { global $DB; if($DB["link"] == "") { if (!$link = @mysql_connect($DB[host], $DB[username], $DB[password])) { return(FALSE); } else { if (!@mysql_select_db($DB[database], $link)) { return(FALSE); } else { //IMPOSTI LINK $DB["link"] = $link; } } } if (!$result = @mysql_query($query, $DB["link"])) $result = FALSE; return $result; } //FUNZIONI DB VERSIONE 2.2 function db_err() { global $DB; if($DB["link"]) return mysql_errno($DB["link"]) . ": " . mysql_error($DB["link"]) . "\n"; } function db_last_insert_id() { return db_insert_id(); } function db_insert_id() { global $DB; return mysql_insert_id($DB["link"]); } function db_mysql_ping() { global $DB; return mysql_ping($DB["link"]); } function db_affected_rows() { global $DB; return mysql_affected_rows($DB["link"]); } function db_q($query,$database=NULL,$databaseCharset=null) { global $DB; if ($GLOBALS["CONF"]["DEBUG"] == "SI") $db_time = indi_time(); if ($GLOBALS["indi_stats_db"]) { $dbq_start = microtime(true); } //controllo keywords non valide per innodb if ($DB["innodb"]) { $query = str_replace("INSERT DELAYED ", "INSERT ", $query); $query = str_replace("REPLACE DELAYED ", "REPLACE ", $query); } if($database != NULL) { //$DB['database'] = $database; // mail("carlotnx@gmail.com","QUERY con database[$database]",indi_debug_array("DATI",$GLOBALS['CONF'])); $link = ""; $no_link = 1; // mysql_close($DB["link"]); $DB["link"] = NULL; } else { $no_link = 0; $link = $DB["link"]; $database = $DB["database"]; } if($link == "") { if (!$link = mysql_connect($DB['host'], $DB['username'], $DB['password'])) { $GLOBALS['CONF']['force_no_redirect'] = "SI"; if (is_tnx()) { echo "Errore nella connessione a $DB[host], $DB[username]";die; } d_err("Errore nella connessione a $DB[host], $DB[username], $DB[password]","mysql_connect","DATAB"); //sleep(3); //apetto un po' //trigger_error(serialize(array("errore"=>"Errore nella connessione a $DB[host]","nome"=>"query","gruppo"=>"INDI")), E_USER_WARNING); return FALSE; } else if (!mysql_select_db($database, $link)) { trigger_error("Errore selezione del database $database", E_USER_ERROR); //$GLOBALS['CONF']['force_no_redirect'] = "SI"; d_err("Errore nella selezione del database $database","mysql_select_db","DATAB"); //sleep(3); //apetto un po' //trigger_error(serialize(array("errore"=>"Errore nella selezione del database $DB[database]","nome"=>"query","gruppo"=>"INDI")), E_USER_WARNING); if($no_link) mysql_close($link); return FALSE; } else { //imposto globale if(!$no_link) $DB["link"] = $link; d_info("Collegato al DB: $database","connect","DATAB"); if(!$databaseCharset && $GLOBALS['CONF']['mcharset'] == "UTF-8"){ $databaseCharset = 'utf8'; } //l'altro database potrebbe avere un charset diverso da quello del sito (intercultura / intercultura_areavolontari) if($databaseCharset) { //mysql_query("SET character_set_connection=utf8",$link); //mysql_query("SET NAMES 'utf8'",$link); /* https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html A SET CHARACTER SET charset_name statement is equivalent to these three statements: SET character_set_client = charset_name; SET character_set_results = charset_name; SET collation_connection = @@collation_database;//questo ci rende dipendendenti dalla configurazione del db che potrebbe differire online / locale mysql_query("SET CHARACTER SET '$databaseCharset'", $link); */ if($databaseCharset != 'utf8') trigger_error("controllare init del database con $databaseCharset (esiste collation $databaseCharset_general_ci?)"); mysql_query("SET character_set_client = ".$databaseCharset, $link); mysql_query("SET character_set_results = ".$databaseCharset, $link); //questi due sovrascrivono quelli della configurazione del database, cosė se i database online / locale hanno parametri diversi non ci influenza mysql_query("SET collation_connection = ".$databaseCharset."_general_ci", $link); mysql_query("SET character_set_connection = ".$databaseCharset, $link); // print_r(mysql_result(mysql_query("SELECT @@character_set_connection;", $link), 0));die; } } } //nocache if($_GET['no_cache'] || $_GET['no_sql_cache']) { $query = str_replace("SELECT","SELECT SQL_NO_CACHE",$query); } //risultato $result = mysql_query($query, $link); if (!$result) { $err = $database.":".mysql_errno($link) . ": " . mysql_error($link) . "\n$query\n"; $DB["error"][] = array($query,$database,mysql_errno($link),mysql_error($link)); //CARLO 17/5/10: aggiunto perchč altrimenti non si riceve NESSUN errore delle query online // if(mysql_errno($link) != 1062){//escludo i "Duplicate entry" CARLO 13/11/2012: non li escludo pių, aggiungero delle @ // if($_GET['dbg'] && $GLOBALS["CONF"]['dove_sono'] == 'rem' && error_reporting()){ // echo mysql_errno($link) . ": " . mysql_error($link) . '
debug_backtrace:'; // } d_err($err,"query","DATAB"); //trigger_error(serialize(array("errore"=>$err,"nome"=>"query","gruppo"=>"INDI")), E_USER_WARNING); // } if($no_link) mysql_close($link); return FALSE; } else { //calcolo tempo //24/03/2016 cecca e carlo, con script che fanno molte query (vedi I:\SITI\toysforyou2013\_pagine\export_libroco.inc.php) // utilizzava troppa memoria ed usciva il fatal quindi abbiamo lasciato di tenersi le query solo se DEBUG = SI //if($GLOBALS["CONF"]["DEBUG"] == "SI" or indi_location() == "loc") { if($GLOBALS["CONF"]["DEBUG"] == "SI") { $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("$query","db:query(QT:$TIME)","DATAB"); $DB["query"][] = array($query,$TIME); } if ($GLOBALS["indi_stats_db"]) { $dbq_diff = microtime(true) - $dbq_start; $GLOBALS["indi_stats_db_tempo_db"] += $dbq_diff; } if ($no_link) mysql_close($link); return $result; } if ($no_link) mysql_close($link); return FALSE; } //forza utf8 function db_q_utf8($query,$database=NULL) { global $DB; //salvo $charset_old = $GLOBALS['CONF']['mcharset']; $GLOBALS['CONF']['mcharset'] = "UTF-8"; $q = db_q($query,$database); //ripristino $GLOBALS['CONF']['mcharset'] = $charset_old; return $q; } //FUNZIONI DB VERSIONE 2.2 function db_q_indi($query) { return db_q($query,"indi"); } //ritorna una array delle righe function db_crea($database) { global $DB; if (!$link = @mysql_connect($DB[host], $DB[username], $DB[password])) { $result = FALSE; d_err("Errore nella connessione a $DB[host]!","pconnect","DATAB"); } $out = mysql_create_db("$database"); return $out; } //ritorna una sola riga || apc function db_qr($query,$database=NULL) { global $DB; if($GLOBALS["DATI"]['indi_apc_all_query'] == "SI" and $database == NULL) { return db_qr_cache($query); } $q = db_q($query,$database); if($q) { $riga = mysql_fetch_assoc($q); //mysql_free_result($q); return $riga; } else { return false; } } function db_qr_cache($query) { global $DB; if($GLOBALS["CONF"]["DEBUG"] == "SI") $db_time = indi_time(); $key = "db_qr_cache:".md5($GLOBALS["DB"].$query); //cache apc if($GLOBALS["DATI"]["indi_apc"] == "SI" && !$GLOBALS["DATI"]["disable_db_cache"] && !$_GET['no_db_cache'] && !$_GET['no_cache']) { //apc $mk = apc_fetch($key); if ($mk) { if($_GET['indi_apc']) print "k"; if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:OUT:db_qr_cache(QT:$TIME)","DATAB"); } return unserialize($mk); } else { $q = db_q($query); if($q) { $result = mysql_fetch_assoc($q); apc_store($key,serialize($result),$GLOBALS["DATI"]['indi_apc_time']); if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:IN:db_qr_cache(QT:$TIME)","DATAB"); } //mysql_free_result($q); return $result; } else { return false; } } } else { if($GLOBALS["DATI"]["indi_apc"] == "SI") apc_delete($key); if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:KO:db_qr_cache(QT:$TIME)","DATAB"); } return db_qr($query); } } //ritorna una array delle righe function db_qa($query,$database_solo_per_indi_maggiore_di_6=NULL) {//se si usa il secondo parametro con indi < 6 succede casino, meglio specificare il database all'interno della query global $DB; if($GLOBALS["DATI"]['indi_apc_all_query'] == "SI") { return db_qa_cache($query,$database_solo_per_indi_maggiore_di_6); } if($GLOBALS[CONF]["indi_subversion"] < 6){ $q = db_q($query); } else { $q = db_q($query,$database_solo_per_indi_maggiore_di_6); } if($q) { if($GLOBALS[CONF]["indi_subversion"] > 5) $array = array();//c3k: cosė ritorna sempre un tipo di dato array() e non da' errori sui foreach /* dentro molti pagine_dinamiche_tpl_1.inc.php viene fatto $sottopagine == "" e echo var_dump(null == "");// => true echo var_dump(array() == "");// => false */ while ($riga = mysql_fetch_assoc($q)) { $a = $riga[$database_solo_per_indi_maggiore_di_6]; //print "+$a+"; if($database_solo_per_indi_maggiore_di_6 != NULL and $GLOBALS[CONF]["indi_subversion"] < 6) $array[$a] = $riga; else $array[] = $riga; } //mysql_free_result($q); return $array; } else { return false; } } //ritorna una array delle righe function db_qa_cache($query,$chiave=NULL) { if($GLOBALS["CONF"]["DEBUG"] == "SI") $db_time = indi_time(); global $DB; if($GLOBALS["DATI"]["indi_apc"] == "SI" && !$GLOBALS["DATI"]["disable_db_cache"] && !$_GET['no_db_cache'] && !$_GET['no_cache']) { //apc $key = "db_qa_cache:".md5($GLOBALS["DB"].$query.$chiave); $mk = apc_fetch($key); if ($mk) { if($_GET['indi_apc']) print "k"; if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:OUT:$key(QT:$TIME)","DATAB"); } return unserialize($mk); } else { $q = db_q($query); if($q) { while ($riga = mysql_fetch_assoc($q)) { $a = $riga[$chiave]; if($chiave != NULL) $array["$a"] = $riga; else $array[] = $riga; } apc_store($key, serialize($array), $GLOBALS["DATI"]['indi_apc_time']); if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:IN:$key(QT:$TIME)","DATAB"); } //mysql_free_result($q); return $array; } else { return false; } } } if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:KO:db_qa_cache(QT:$TIME)","DATAB"); } return db_qa($query,$chiave); } //ritorna una array delle righe ??? function db_qa_indi($query,$chiave=NULL) { if($GLOBALS["CONF"]["DEBUG"] == "SI") $db_time1 = indi_time(); global $DB; $q = db_q($query,"indi"); while ($riga = mysql_fetch_assoc($q)) { $a = $riga[$chiave]; //print "+$a+"; if($chiave) $array["$a"] = $riga; else $array[] = $riga; } //mysql_free_result($q); return $array; } function db_qrs($query, $campo=0, $database=NULL, $databaseCharset=null) { global $DB; if($GLOBALS["DATI"]['indi_apc_all_query'] == "SI") { return db_qrs_cache($query,$campo); } $q = db_q($query,$database,$databaseCharset); if($q) { $riga = mysql_fetch_array($q); //mysql_free_result($q); return $riga[$campo]; } else { return false; } } function db_qrs_cache($query,$campo=0) { global $DB; if($GLOBALS["CONF"]["DEBUG"] == "SI") $db_time = indi_time(); if($GLOBALS["DATI"]["indi_apc"] == "SI" && !$GLOBALS["DATI"]["disable_db_cache"] && !$_GET['no_db_cache'] && !$_GET['no_cache']) { //apc $key = "db_qrs_cache:".md5($GLOBALS["DB"].$query.$campo); $mk = apc_fetch($key); if ($mk) { if($_GET['indi_apc']) print "k"; if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:OUT:db_qrs_cache($key, ".$GLOBALS["DATI"]['indi_apc_time'].")(QT:$TIME)","DATAB"); } return $mk; } else { $q = db_q($query); if($q) { $riga = mysql_fetch_array($q); apc_store($key, $riga[$campo], $GLOBALS["DATI"]['indi_apc_time']); if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:IN:db_qrs_cache($key, ".$GLOBALS["DATI"]['indi_apc_time'].")(QT:$TIME)","DATAB"); } //mysql_free_result($q); return $riga[$campo]; } else { return false; } } } if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:KO:db_qrs_cache(".$GLOBALS["DATI"]['indi_apc_time'].")(QT:$TIME)","DATAB"); } return db_qrs($query,$campo); } function db_qf($query,$funzione="db_qf_array") { //funzione di base function db_qf_array($V){ return $V; } global $DB; $q = db_q($query); while ($V = mysql_fetch_assoc($q)) { $out[] = $funzione($V); } //mysql_free_result($q); return $out; } //queri con risultati separati da un separatore function db_qsep($query,$campo,$sep="|") { global $DB; $q = db_q($query); while ($riga = mysql_fetch_assoc($q)) { $a = $riga[$campo]; //print "+$a+"; $out .= $a.$sep; } //mysql_free_result($q); return $out; } //queri con risultati in un array chiave valore function db_qkv_cache($query,$kk=NULL,$vv=NULL,$ARR=NULL) { global $DB; if($GLOBALS["CONF"]["DEBUG"] == "SI") $db_time = indi_time(); if($GLOBALS["DATI"]["indi_apc"] == "SI" && !$GLOBALS["DATI"]["disable_db_cache"] && !$_GET['no_db_cache'] && !$_GET['no_cache']) { //apc $key = "db_qkv_cache:".md5($GLOBALS["DB"].$query.$kk.$vv); $mk = apc_fetch($key); if ($mk) { if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:OUT:db_qkv_cache($key, ".$GLOBALS["DATI"]['indi_apc_time'].")(QT:$TIME)","DATAB"); } return $mk; } else { $q = db_q($query); if($q) { if(is_array($ARR)) $out = $ARR; while ($riga = mysql_fetch_assoc($q)) { if($vv === NULL) { if($kk == NULL) $out[] = $riga[0]; else $out[] = $riga[$kk]; } else { $k = $riga[$kk]; $v = $riga[$vv]; $out[$k] = $v; } } apc_store($key,$out, $GLOBALS["DATI"]['indi_apc_time']); if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:IN:db_qrs_cache($key, ".$GLOBALS["DATI"]['indi_apc_time'].")(QT:$TIME)","DATAB"); } //mysql_free_result($q); return $out; } else { return false; } } } if($GLOBALS["CONF"]["DEBUG"] == "SI") { //debug $db_time2 = indi_time(); $TIME = $db_time2 - $db_time; d_info("","apc:KO:db_qkv_cache(".$GLOBALS["DATI"]['indi_apc_time'].")(QT:$TIME)","DATAB"); } return db_qkv($query,$kk,$vv,$ARR); } //queri con risultati in un array chiave valore function db_qkv($query,$kk=NULL,$vv=NULL,$ARR=NULL) { global $DB; if($GLOBALS["DATI"]['indi_apc_all_query'] == "SI") { return db_qkv_cache($query,$kk,$vv,$ARR); } $q = db_q($query); if($q) { if(is_array($ARR)) $out = $ARR; while ($riga = mysql_fetch_array($q)) { if($vv === NULL) { if($kk == NULL) $out[] = $riga[0]; else $out[] = $riga[$kk]; } else { $k = $riga[$kk]; $v = $riga[$vv]; $out[$k] = $v; } } //mysql_free_result($q); return $out; } else { return false; } } function db_restore_dump($filename,$database=NULL){ $templine = ''; $lines = file($filename); foreach ($lines as $line){ if (substr($line, 0, 2) == '--' || $line == '') continue; $templine .= $line; if (substr(trim($line), -1, 1) == ';'){ db_q($templine,$database); $templine = ''; } } } function db_create_db($nome, $charset=null){ db_connect_only();//credenziali db_q("CREATE DATABASE IF NOT EXISTS ".$nome.($charset?" CHARACTER SET $charset":"")); return db_connect();//seleziona db } function db_connect_only(){ global $DB; $DB['link'] = mysql_connect($DB['host'], $DB['username'], $DB['password']); return $DB['link']; } function db_connect($tipo="link") { global $DB; if (!$link = mysql_connect($DB[host], $DB[username], $DB[password])) { return false; $result = 0; print ("
'; // debug_print_backtrace(); // echo '