
Originariamente inviata da
camionistaxcaso
Gratis anche la polmonite

Grazie Marino posta pure

Codice PHP:
<?php
class TheBestDB {
private $pdo;
private $inTransaction = false;
private $dbNAME;
private $dbUSER;
private $dbPASS;
public $sth;
public $lastInsertId = 0;
function __construct( $eDBNAME="", $eDBUSER="", $eDBPASS="" )
{
$this->dbNAME = $eDBNAME;
$this->dbUSER = $eDBUSER;
$this->dbPASS = $eDBPASS;
// $this->MyLog( "" );
// $this->MyLog( "main : ".basename ( $_SERVER['PHP_SELF'],".php" ).".php" );
try { $this->pdo = new PDO( $this->dbNAME, $this->dbUSER, $this->dbPASS ); }
catch ( PDOException $e ) { $this->handle_sql_errors( "PDO : OPEN DB", $e ); }
$this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$this->OPtransaction = false;
}
public function __destruct()
{
$this->close();
}
public function queryS( $sql, $params=array() ) // return the retrieved dataset
{
return $this->BindParams( $sql, $params )->fetchALL( PDO::FETCH_NUM );
}
public function queryM( $sql, $params=array() ) // return the involved rows counter
{
return $this->BindParams( $sql, $params )->rowCount();
}
public function queryC( $sql, $params=array() ) // return the retrieved element
{
return current( $this->BindParams( $sql, $params )->fetch() );
}
public function query( $sql, $params=array() ) // return $sth, the object for subsequent operation
{
return $this->BindParams( $sql, $params );
}
private function BindParams( $sql, $params=array() )
{
$this->MyLog( "SQL : ".$this->pdoSqlDebug($sql, $params) );
if ( substr_count( $sql, "?" ) != count( $params ) )
$this->MyErr( "ERRORE : incongruenza nei parametri della query -> ".$sql );
try { $sth = $this->pdo->prepare( $sql, array( PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL ) );
foreach( $params as $key => &$param ) { $sth->bindParam( $key + 1, $param ); }
$sth->execute();
return $sth; }
catch( PDOException $e ){ $this->handle_sql_errors( $sql, $e ); }
}
public function begin_transaction()
{
try { $this->pdo->beginTransaction(); $this->OPtransaction = true; }
catch( PDOException $e ){ $this->handle_sql_errors( $row, $e ); }
return true;
}
public function commit_transaction()
{
try { $this->pdo->commit(); $this->OPtransaction = false; }
catch( PDOException $e ){ $this->handle_sql_errors( $row, $e ); }
}
public function rollback_transaction()
{
try { $this->pdo->rollBack(); $this->OPtransaction = false; }
catch( PDOException $e ){ $this->handle_sql_errors( $row, $e ); }
}
public function close()
{
unset( $this->pdo );
}
public function MyLog( $text )
{
global $swN;
return;
error_log( $swN." ".$text, 0 );
}
public function MyErr( $text )
{
global $swN;
error_log( $swN." ".$text, 0 );
// require_once '../includes/mail_SolidError.php';
print "ERRORE INATTESO, contatta l'amministratore del sistema";
die;
}
private function handle_sql_errors( $sql, $e )
{
if ( $this->OPtransaction ) $this->pdo->rollBack();
error_log( "SQL cmd : ".$sql, 0 );
error_log( "error code : ".$e->getCode(), 0 );
error_log( "error info : ".$e->getMessage(), 0 );
// require_once '../includes/mail_SqlFatalError.php';
print "ERRORE INATTESO, contatta l'amministratore del sistema";
die;
}
static public function pdoSqlDebug($raw_sql, $parameters)
{
$keys = array();
$values = $parameters;
foreach ($parameters as $key => $value) {
// check if named parameters (':param') or anonymous parameters ('?') are used
if (is_string($key)) {
$keys[] = '/:'.$key.'/';
} else {
$keys[] = '/[?]/';
}
// bring parameter into human-readable format
if (is_string($value)) {
$values[$key] = "'" . $value . "'";
} elseif (is_array($value)) {
$values[$key] = implode(',', $value);
} elseif (is_null($value)) {
$values[$key] = 'NULL';
}
}
$raw_sql = preg_replace($keys, $values, $raw_sql, 1, $count);
return $raw_sql;
}
}
?>