try { $this->db = new PDO($dbPDO.":Server=".$dbHOST.";Database=".$dbNAME, $dbUSER, $dbPASS); }
try { $this->db = new PDO($dbPDO.":unix_socket=/var/run/mysql/mysql.sock;dbname=".$dbNAME, $dbUSER, $dbPASS,
array(PDO::ATTR_PERSISTENT => true)); }
require 'Config_DB.php'; // sostituisci con la connessione che già usi
$data = $db->Query_select($sql); // esegui la query composta, e ne ricavi i 2 risultati
$dbresult = count($data);
if ($dbresult) {
$TotalDays = $data[0][0];
$TotalCost = $data[0][1];
try { $this->db = new PDO($dbPDO.":Server=".$dbHOST.";Database=".$dbNAME, $dbUSER, $dbPASS); }
try { $this->db = new PDO($dbPDO.":Server=".$dbHOST.";dbname=".$dbNAME, $dbUSER, $dbPASS); }
Fatal error: Class 'Database' not found in /web/htdocs/MIOSITO.IT/home/test/connetti.php on line 96
$dbhost = 'IP';
$dbusername = 'USERNAME';
$dbpasswd = 'PASSWORD';
$database_name = 'NOME_DATABASE';
$table = 'roomprices';
$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd")
or die ("Couldn't connect to server.");
$db = mysql_select_db("$database_name", $connection) or die("Couldn't select database.");
//esegue una qualunque query, ritorna il risultato conforme alla query stessa
function Query_exec($sql){
$this->MyLog("SQL : $sql");
try { return $this->db->exec($sql); }
catch(PDOException $e){ $this->handle_sql_errors($sql, $e); }
}
//select, per estrarre tutti i dati della tabella, ritorna array dei dati con FETCH_NUM
function Query_select($sql){
$this->MyLog("SQL : $sql");
try { $sth = $this->db->prepare($sql); $sth->execute(); return $sth->fetchall(PDO::FETCH_NUM); }
catch(PDOException $e){ $this->handle_sql_errors($sql, $e); }
}
//select, per estrarre tutti i dati della tabella, ritorna array dei dati con FETCH_BOTH
function Query_select_b($sql){
$this->MyLog("SQL : $sql");
try { $sth = $this->db->prepare($sql); $sth->execute(); return $sth->fetchall(PDO::FETCH_BOTH); }
catch(PDOException $e){ $this->handle_sql_errors($sql, $e); }
}
//prepare -> bind -> execute, query con parametri
function Query_bind($sql,
$par1 ='', $par2 ='', $par3 ='', $par4 ='', $par5 ='', $par6 ='', $par7 ='', $par8 ='', $par9 ='', $par10='',
$par11='', $par12='', $par13='', $par14='', $par15='', $par16='', $par17='', $par18='', $par19='', $par20=''){
$this->MyLog("SQL : ".$sql);
$x = substr_count($sql, "?");
if ($x > 20) $this->MyErr("ERRORE : la query contiene più di 20 parametri, gestiti fino a 20");
try {
$sth = $this->db->prepare($sql);
if($x > 0) { $sth->bindParam(1, $par1);
if($x > 1) { $sth->bindParam(2, $par2);
if($x > 2) { $sth->bindParam(3, $par3);
if($x > 3) { $sth->bindParam(4, $par4);
if($x > 4) { $sth->bindParam(5, $par5);
if($x > 5) { $sth->bindParam(6, $par6);
if($x > 6) { $sth->bindParam(7, $par7);
if($x > 7) { $sth->bindParam(8, $par8);
if($x > 8) { $sth->bindParam(9, $par9);
if($x > 9) { $sth->bindParam(10, $par10);
if($x > 10) { $sth->bindParam(11, $par11);
if($x > 11) { $sth->bindParam(12, $par12);
if($x > 12) { $sth->bindParam(13, $par13);
if($x > 13) { $sth->bindParam(14, $par14);
if($x > 14) { $sth->bindParam(15, $par15);
if($x > 15) { $sth->bindParam(16, $par16);
if($x > 16) { $sth->bindParam(17, $par17);
if($x > 17) { $sth->bindParam(18, $par18);
if($x > 18) { $sth->bindParam(19, $par19);
if($x > 19) { $sth->bindParam(20, $par20); } } } } } } } } } } } } } } } } } } } }
return $sth->execute(); }
catch(PDOException $e){ $this->handle_sql_errors($sql, $e); }
}
function close(){
unset($this->db);
}
//scrive un testo nel log di PHP
function MyLog($text) {
error_log($text, 0); // commentare questa riga se in produzione, no log !
}
//scrive un errore nel log di PHP e interrompe l'esecuzione
function MyErr($text) {
error_log($text, 0);
print "ERRORE INATTESO, contatta l'amministratore del sistema";
die;
}
//gestisce gli errori delle query. vedi setAttribute più sopra
function handle_sql_errors($sql, $e){
error_log("SQL cmd : $sql", 0);
error_log("error code : ". $e->getCode(), 0);
error_log("error info : ". $e->getMessage(), 0);
print "ERRORE INATTESO, contatta l'amministratore del sistema";
die;
}
if (isset($_REQUEST['_SESSION'])) die("Get lost Muppet!");
$db=new Database();
<?php
# http://localhost/test_site/php/test/mysqlPDO.php
error_reporting(E_ALL);
class database {
private $db;
public $OPtransaction = false;
function __construct(
$dbPDO = 'mysql',
$dbHOST = '',
$dbUSER = '',
$dbPASS = '',
$dbNAME = ''){
try { $this->db = new PDO($dbPDO.":host=".$dbHOST.";dbname=".$dbNAME, $dbUSER, $dbPASS); }
catch (PDOException $e) { $this->handle_sql_errors("PDO : OPEN DB", $e); }
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
function __destruct() {
$this->close();
}
function close(){
unset($this->db);
}
function handle_sql_errors($sql, $e){
if (PDO::inTransaction()) $this->db->rollBack();
var_dump($sql);
var_dump($e->getCode());
var_dump($e->getMessage());
print "ERRORE INATTESO, contatta l'amministratore del sistema";
die;
} }
if (isset($_REQUEST['_SESSION'])) die("Get lost Muppet!");
$db=new database();
print "connesso !";
?>
connesso ! Fatal error: Call to undefined method database::Query_select() in /web/htdocs/www.miosito/home/dati/dati.php on line 23
<?php
include 'connetti.php';
$idhotel = 1;
$room = 1;
$DataArrivo = '2014/04/04';
$DataPartenza= '2014/05/17';
$IDprezzo = 'price'; // nome della colonna da cercare per tipologia di pensione
$sql = PreparaSql($idhotel, $room, $DataArrivo, $DataPartenza, $IDprezzo);
$data = $db->Query_select($sql);
$dbresult = count($data);
if ($dbresult) {
$TotalDays = $data[0][0];
$TotalCost = $data[0][1];
print "Hotel : " . $idhotel . "<br />
Camera : " . $room . "<br />
Pensione : " . $IDprezzo . "<br />
Arrivo : " . $DataArrivo . "<br />
Partenza : " . $DataPartenza . "<br />
TotalDays : " . $TotalDays . "<br />
TotalCost : " . $TotalCost . "<br />";
}
function PreparaSql($idhotel='', $room='', $DataArrivo='', $DataPartenza='', $IDprezzo='') {
// inserire eventuali controlli di validità sui parametri se non fatti prima
$sql = "declare @idhotel as int;";
$sql.= "declare @room as int;";
$sql.= "declare @data_arrivo as datetime;";
$sql.= "declare @data_partenza as datetime;";
$sql.= "set @idhotel = " . $idhotel . ";";
$sql.= "set @room = " . $room . ";";
$sql.= "set @data_arrivo = '" . $DataArrivo . "';";
$sql.= "set @data_partenza = '" . $DataPartenza . "';";
$sql.= "select sum(A.TotalDays) as TotalDays, sum(A.TotalCost) as TotalCost from (";
$sql.= "select";
$sql.= " 1 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", CASE WHEN @data_partenza <= price_end";
$sql.= " THEN DATEDIFF(day, @data_arrivo, @data_partenza)";
$sql.= " ELSE DATEDIFF(day, @data_arrivo, price_end) + 1";
$sql.= " END as TotalDays";
$sql.= ", pernottamento";
$sql.= ", pernottamento * (";
$sql.= " CASE WHEN @data_partenza <= price_end";
$sql.= " THEN DATEDIFF(day, @data_arrivo, @data_partenza)";
$sql.= " ELSE DATEDIFF(day, @data_arrivo, price_end) + 1";
$sql.= " END ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and @data_arrivo>=price_start and @data_arrivo<=price_end";
$sql.= " union ";
$sql.= "select";
$sql.= " 2 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", DATEDIFF(day, price_start, @data_partenza) as TotalDays";
$sql.= ", pernottamento";
$sql.= ", pernottamento * ( DATEDIFF(day, price_start, @data_partenza) ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and @data_partenza>=price_start and @data_partenza<=price_end and @data_arrivo<price_start";
$sql.= " union ";
$sql.= "select";
$sql.= " 3 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", 1+DATEDIFF(day, price_start, price_end) as TotalDays";
$sql.= ", pernottamento";
$sql.= ", pernottamento * ( 1+DATEDIFF(day, price_start, price_end) ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and price_start>@data_arrivo and price_end<@data_partenza";
$sql.= ") A";
return str_replace("pernottamento", $IDprezzo, $sql);
}
?>
$sql = PreparaSql($idhotel, $room, $DataArrivo, $DataPartenza, $IDprezzo);
qui trovi il suo postIn ogni caso ti consiglio di abbandonare da subito l'estensione mysql che è già deprecata e verrà presto rrimossa.
una valida alternativa è mysqli , qui trovi alcune funzioni di base.
scusa ma non mi e' chiaro cosa eliminare e cosa lasciare mi potresti postare il codice con le correzioni del caso?
grazie
<?php
$dbhost = 'IP';
$dbusername = 'USERNAME';
$dbpasswd = 'PASSWORD';
$database_name = 'NOME_DATABASE';
$table = 'roomprices';
$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd")
or die ("Couldn't connect to server.");
$db = mysql_select_db("$database_name", $connection) or die("Couldn't select database.");
?>
$sql = "declare @idhotel as int;";
$sql.= "declare @room as int;";
$sql.= "declare @data_arrivo as datetime;";
$sql.= "declare @data_partenza as datetime;";
$sql.= "set @idhotel = " . $idhotel . ";";
$sql.= "set @room = " . $room . ";";
$sql.= "set @data_arrivo = '" . $DataArrivo . "';";
$sql.= "set @data_partenza = '" . $DataPartenza . "';";
$sql.= "select sum(A.TotalDays) as TotalDays, sum(A.TotalCost) as TotalCost from (";
$sql.= "select";
$sql.= " 1 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", CASE WHEN @data_partenza <= price_end";
$sql.= " THEN DATEDIFF(@data_partenza, @data_arrivo)";
$sql.= " ELSE DATEDIFF(price_end, @data_arrivo) + 1";
$sql.= " END as TotalDays";
$sql.= ", COLPREZZO";
$sql.= ", COLPREZZO * (";
$sql.= " CASE WHEN @data_partenza <= price_end";
$sql.= " THEN DATEDIFF(@data_partenza, @data_arrivo)";
$sql.= " ELSE DATEDIFF(price_end, @data_arrivo) + 1";
$sql.= " END ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and @data_arrivo>=price_start and @data_arrivo<=price_end";
$sql.= " union ";
$sql.= "select";
$sql.= " 2 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", DATEDIFF(@data_partenza, price_start) as TotalDays";
$sql.= ", COLPREZZO";
$sql.= ", COLPREZZO * ( DATEDIFF(@data_partenza, price_start) ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and @data_partenza>=price_start and @data_partenza<=price_end and @data_arrivo<price_start";
$sql.= " union ";
$sql.= "select";
$sql.= " 3 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", 1+DATEDIFF(price_end, price_start) as TotalDays";
$sql.= ", COLPREZZO";
$sql.= ", COLPREZZO * ( 1+DATEDIFF(price_end, price_start) ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and price_start>@data_arrivo and price_end<@data_partenza";
$sql.= ") A";
$sql = str_replace("COLPREZZO", $IDprezzo, $sql);
<?php
$dbhost = 'IP';
$dbusername = 'USERNAME';
$dbpasswd = 'PASSWORD';
$database_name = 'NOME_DATABASE';
$table = 'roomprices';
$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd")
or die ("Couldn't connect to server.");
$db = mysql_select_db("$database_name", $connection) or die("Couldn't select database.");
function PreparaSql($idhotel='', $room='', $DataArrivo='', $DataPartenza='', $IDprezzo='') {
$sql = "declare @idhotel as int;";
$sql.= "declare @room as int;";
$sql.= "declare @data_arrivo as datetime;";
$sql.= "declare @data_partenza as datetime;";
$sql.= "set @idhotel = " . $idhotel . ";";
$sql.= "set @room = " . $room . ";";
$sql.= "set @data_arrivo = '" . $DataArrivo . "';";
$sql.= "set @data_partenza = '" . $DataPartenza . "';";
$sql.= "select sum(A.TotalDays) as TotalDays, sum(A.TotalCost) as TotalCost from (";
$sql.= "select";
$sql.= " 1 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", CASE WHEN @data_partenza <= price_end";
$sql.= " THEN DATEDIFF(@data_partenza, @data_arrivo)";
$sql.= " ELSE DATEDIFF(price_end, @data_arrivo) + 1";
$sql.= " END as TotalDays";
$sql.= ", COLPREZZO";
$sql.= ", COLPREZZO * (";
$sql.= " CASE WHEN @data_partenza <= price_end";
$sql.= " THEN DATEDIFF(@data_partenza, @data_arrivo)";
$sql.= " ELSE DATEDIFF(price_end, @data_arrivo) + 1";
$sql.= " END ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and @data_arrivo>=price_start and @data_arrivo<=price_end";
$sql.= " union ";
$sql.= "select";
$sql.= " 2 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", DATEDIFF(@data_partenza, price_start) as TotalDays";
$sql.= ", COLPREZZO";
$sql.= ", COLPREZZO * ( DATEDIFF(@data_partenza, price_start) ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and @data_partenza>=price_start and @data_partenza<=price_end and @data_arrivo<price_start";
$sql.= " union ";
$sql.= "select";
$sql.= " 3 as tipo";
$sql.= ", price_start";
$sql.= ", price_end";
$sql.= ", @data_arrivo as arrivo";
$sql.= ", @data_partenza as partenza";
$sql.= ", 1+DATEDIFF(price_end, price_start) as TotalDays";
$sql.= ", COLPREZZO";
$sql.= ", COLPREZZO * ( 1+DATEDIFF(price_end, price_start) ) as TotalCost";
$sql.= " from roomprices";
$sql.= " where idhotel=@idhotel and room=@room";
$sql.= " and price_start>@data_arrivo and price_end<@data_partenza";
$sql.= ") A";
return str_replace("COLPREZZO", $IDprezzo, $sql);
}
?>
$sql = PreparaSql($idhotel, $room, $DataArrivo, $DataPartenza, $IDprezzo);
$data = $db->Query_select($sql);
CREATE TABLE IF NOT EXISTS `roomprices` (
`idhotel` int(11) NOT NULL,
`room` int(11) NOT NULL,
`data` date NOT NULL,
`pensionecompleta` float NOT NULL,
`mezzapensione` float NOT NULL,
`pernottamento` float NOT NULL,
KEY `index1` (`idhotel`,`room`,`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
<?php
$arrivo = "2014-06-06";
$partenza ="2014-06-10";
$tipo_pensione = "pernottamento";
// lavoro sulle date
// arrivo
$array_arrivo = explode("-", $arrivo);
$anno_arrivo = $array_arrivo[0];
$mese_arrivo = $array_arrivo[1];
$giorno_arrivo = $array_arrivo[2];
// partenza
$array_partenza = explode("-", $partenza);
$anno_partenza = $array_partenza[0];
$mese_partenza = $array_partenza[1];
$giorno_partenza = $array_partenza[2];
$notti = $giorno_partenza - 1;
$nottizero = "0".$notti;
$data_via = array($anno_partenza, $mese_partenza, $nottizero);
$data_partenza = implode("-", $data_via);
// giorni totali di permanenza
$datetime1 = new DateTime($data_partenza);
$datetime2 = new DateTime($arrivo);
$interval = $datetime1->diff($datetime2);
$giorni = $interval->format('%a');
// echo $nottizero;
// tolgo una notte
include "connetti.php";
// query per il totale da pagare
$sql = "SELECT sum($tipo_pensione) AS tot FROM roomprices WHERE data BETWEEN '$arrivo' AND '$data_partenza'";
// echo $sql."<br><br>";
$result = mysql_query($sql);
while($row=mysql_fetch_array($result)) { $totale = $row['tot']; }
// stampo risultati
echo "<hr>";
echo "data di arrivo ".$arrivo;
echo "<br>";
echo "data di partenza ".$partenza;
echo "<br>";
// stampo le notti di permanenza
$totale_notti = $giorni+1;
if ($giorni == "0") { echo "notti totali di permanenza 1"; }
else {echo "notti totali di permanenza ".$totale_notti; }
echo "<br>";
echo "totale da pagare ".$totale." € ";
<?php
$hotel = 1;
$camera = 1;
$arrivo = "2014-06-06";
$partenza ="2014-06-10";
$tipo_pensione = "pernottamento";
// calcolo le notti di presenza
$datetime1 = new DateTime($partenza);
$datetime2 = new DateTime($arrivo);
$interval = $datetime1->diff($datetime2);
$totale_notti = $interval->format('%a');
print "<hr><br />";
print "hotel : ".$hotel."<br />";
print "camera : ".$camera."<br />";
print "data di arrivo : ".$arrivo."<br />";
print "data di partenza : ".$partenza."<br />";
print "notti totali di permanenza : ".$totale_notti."<br />";
if ($totale_notti < 1) die('ERRORE NELLE DATE DI ARRIVO E PARTENZA');
include "connetti.php";
$sql = "SELECT sum($tipo_pensione) AS tot FROM roomprices ";
$sql.= "WHERE idhotel=".$hotel;
$sql.= " AND room=".$camera;
$sql.= " AND data>='".$arrivo."'"; // giorno di arrivo e successivi
$sql.= " AND data<'".$partenza."'"; // esclusa la partenza
// print "sql : ".$sql."<br /><br />";
$result = mysql_query($sql);
while($row=mysql_fetch_array($result)) { $totale = $row['tot']; }
print "totale da pagare : ".$totale." €<br />";
?>