<?php

##################################################################################
#    HOTELDRUID
#    Copyright (C) 2001-2023 by Marco Maria Francesco De Santis (marco@digitaldruid.net)
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    any later version accepted by Marco Maria Francesco De Santis, which
#    shall act as a proxy as defined in Section 14 of version 3 of the
#    license.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
##################################################################################

#Funzioni per usare il database MYSQL con estensioni mysqli

ignore_user_abort(1);

# variabili per le differenze nella sintassi delle query
#global $ILIKE,$LIKE;
$ILIKE = "LIKE";
$LIKE = "LIKE BINARY";
$DATETIME = "datetime";
$MEDIUMTEXT = "mediumtext";
unset($link_mysqli);



function connetti_db ($database,$host,$port,$user,$password,$estensione) {

global $link_mysqli;
if ($estensione == "SI") dl("mysqli.so");
$link_mysqli = mysqli_connect($host,$user,$password,$database,$port);
if ($link_mysqli) @mysqli_query($link_mysqli,"SET NAMES 'utf8mb4'");

return $link_mysqli;

} # fine function connetti_db



function disconnetti_db (&$numconnessione) {

$risul = mysqli_close($numconnessione);
return $risul;

} # fine function disconnetti_db



if (substr($PHPR_LOG,0,2) != "SI") {

function esegui_query ($query,$silenzio = "",$idlog = "") {

global $link_mysqli;
$risul[-1] = mysqli_query($link_mysqli,$query);
$risul[-2] = -1;

if (!$risul[-1]) {
# bug mariadb: temporary table already existing when adding a column
if (strtolower(substr($query,0,12)) == "alter table " or strtolower(substr($query,0,15)) == "alter database ") {
sleep(1);
$risul[-1] = mysqli_query($link_mysqli,$query);
} # fine if (strtolower(substr($query,0,12)) == "alter table " or strtolower(substr($query,0,15)) == "alter database ")
if (!$risul[-1]) {
$risul = $risul[-1];
if ($silenzio != "totale") {
global $PHPR_TAB_PRE;
if (!$silenzio) echo "<br>ERROR IN: ".htmlspecialchars(str_replace(" ".$PHPR_TAB_PRE," ",$query))." <br>".htmlspecialchars(mysqli_errno($link_mysqli).": ".mysqli_error($link_mysqli))."<br>";
error_log("IN ".$_SERVER['PHP_SELF']." MYSQL ERROR: ".substr(str_replace(" ".$PHPR_TAB_PRE," ",$query),0,25)."... - ".mysqli_errno($link_mysqli).": ".mysqli_error($link_mysqli));
} # fine if ($silenzio != "totale")
} # fine if (!$risul[-1])
} # fine if (!$risul[-1])

return $risul;

} # fine function esegui_query

} # fine if (substr($PHPR_LOG,0,2) != "SI")


else {
if (!function_exists("inserisci_log")) include("./includes/funzioni_log.php");

function esegui_query ($query,$silenzio = "",$idlog = "") {

global $link_mysqli;
$risul[-1] = mysqli_query($link_mysqli,$query);
$risul[-2] = -3;

if (!$risul[-1]) {
# bug mariadb: temporary table already existing when adding a column
if (strtolower(substr($query,0,12)) == "alter table ") {
sleep(1);
$risul[-1] = mysqli_query($link_mysqli,$query);
} # fine if (strtolower(substr($query,0,12)) == "alter table ")
if (!$risul[-1]) {
$risul = $risul[-1];
if ($silenzio != "totale") {
global $PHPR_TAB_PRE;
if (!$silenzio) echo "<br>ERROR IN: ".htmlspecialchars(str_replace(" ".$PHPR_TAB_PRE," ",$query))." <br>".htmlspecialchars(mysqli_errno($link_mysqli).": ".mysqli_error($link_mysqli))."<br>";
error_log("IN ".$_SERVER['PHP_SELF']." MYSQL ERROR: ".substr(str_replace(" ".$PHPR_TAB_PRE," ",$query),0,25)."... - ".mysqli_errno($link_mysqli).": ".mysqli_error($link_mysqli));
} # fine if ($silenzio != "totale")
} # fine if (!$risul[-1])
} # fine if (!$risul[-1])

if ($idlog != 1) inserisci_log($query,$idlog);

return $risul;

} # fine function esegui_query

} # fine else if (substr($PHPR_LOG,0,2) != "SI")



function risul_query (&$query,$riga,$colonna,$tab="") {

/*
# version that uses too much memory ($query stores each line)
if (!$query[$riga]) {
if ($query[-2] != ($riga - 1)) mysqli_data_seek($query[-1],$riga);
$query[$riga] = mysqli_fetch_array($query[-1]);
$query[-2] = $riga;
#if (!$risul) echo "<br>Nessun risultato in riga $riga colonna $colonna<br>";
} # fine if (!$query[$riga])

return $query[$riga][$colonna];
*/

if ($query[-2] != $riga) {
if ($query[-2] != ($riga - 1)) mysqli_data_seek($query[-1],$riga);
$query[1] = mysqli_fetch_array($query[-1]);
$query[-2] = $riga;
#if (!$risul) echo "<br>Nessun risultato in riga $riga colonna $colonna<br>";
} # fine if ($query[-2] != $riga)

return $query[1][$colonna];

} # fine function risul_query



function numlin_query ($query) {

$risul = mysqli_num_rows($query[-1]);
return $risul;

} # fine function numlin_query


function aggslashdb ($stringa) {

$risul = addslashes((string) $stringa);
return $risul;

} # fine function aggslashdb



function arraylin_query (&$query,$num) {

if ($query[-2] != ($num - 1)) mysqli_data_seek($query[-1],$num);
$risul =  mysqli_fetch_row($query[-1]);
$query[-2] = $num;
return $risul;

} # fine function arraylin_query



function numcampi_query ($query) {

$risul = mysqli_num_fields($query[-1]);
return $risul;

} # fine function numcampi_query



function nomecampo_query ($query,$num) {

$risul = mysqli_fetch_field_direct($query[-1],$num);
return $risul->name;

} # fine function nomecampo_query



function tipocampo_query ($query,$num) {

$risul = mysqli_fetch_field_direct($query[-1],$num);
return $risul->type;

} # fine function tipocampo_query



function dimcampo_query ($query,$num) {

$risul = mysqli_fetch_field_direct($query[-1],$num);
return $risul->max_length;

} # fine function dimcampo_query



function chiudi_query (&$query) {

mysqli_free_result($query[-1]);
$query = array();

} # fine function chiudi_query



function lock_tabelle ($tabelle,$altre_tab_usate = "") {

$lista_tabelle = "";
if (@is_array($tabelle)) {
for ($num1 = 0 ; $num1 < count($tabelle); $num1++) {
$lista_tabelle .= $tabelle[$num1]." write,";
} # fine for $num1
} # fine if (@is_array($tabelle))
if (@is_array($altre_tab_usate)) {
for ($num1 = 0 ; $num1 < count($altre_tab_usate); $num1++) {
$lista_tabelle .= $altre_tab_usate[$num1]." read,";
} # fine for $num1
} # fine if (@is_array($altre_tab_usate))
$lista_tabelle = substr($lista_tabelle,0,-1);
global $link_mysqli;
$risul = mysqli_query($link_mysqli,"lock tables $lista_tabelle");
if (!$risul) {
echo "<br>ERROR IN: lock tables ".htmlspecialchars($lista_tabelle)."<br>".htmlspecialchars(mysqli_errno($link_mysqli).": ".mysqli_error($link_mysqli))."<br>";
error_log("IN ".$_SERVER['PHP_SELF']." MYSQL ERROR: lock tables $lista_tabelle - ".mysqli_errno($link_mysqli).": ".mysqli_error($link_mysqli));
} # fine if (!$risul)

return $risul;

} # fine function lock_tabelle


function unlock_tabelle (&$tabelle_lock,$azione = "") {

global $link_mysqli;
$risul = mysqli_query($link_mysqli,"unlock tables");
$tabelle_lock = null;

} # fine function unlock_tabelle



function crea_indice ($tabella,$colonne,$nome) {

global $link_mysqli;
mysqli_query($link_mysqli,"alter table $tabella add index $nome ($colonne)");

} # fine function crea_indice



?>
