361 lines
9.3 KiB
PHP
361 lines
9.3 KiB
PHP
|
<?php
|
||
|
class WDB
|
||
|
{
|
||
|
/**
|
||
|
* @var Zend_Db_Adapter_Abstract
|
||
|
*/
|
||
|
protected $db = null;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @var unknown
|
||
|
*/
|
||
|
protected $result = null;
|
||
|
|
||
|
protected $errorCode = 0;
|
||
|
|
||
|
protected $errorMsg = '';
|
||
|
|
||
|
public function __construct( $database = null, $host = null, $user = null, $password = null )
|
||
|
{
|
||
|
if ( $database === null ) {
|
||
|
$database = 'jo';
|
||
|
}
|
||
|
|
||
|
if ( $host === null ) {
|
||
|
$c = Zend_Registry::get('config');
|
||
|
$config = new Zend_Config(array(
|
||
|
'adapter' => $c->profil->db->metier->adapter,
|
||
|
'params' => array(
|
||
|
'host' => $c->profil->db->metier->params->host,
|
||
|
'username'=> $c->profil->db->metier->params->username,
|
||
|
'password'=> $c->profil->db->metier->params->password,
|
||
|
'dbname'=> $database,
|
||
|
'driver_options' => array(
|
||
|
MYSQLI_INIT_COMMAND => "SET NAMES utf8",
|
||
|
),
|
||
|
),
|
||
|
));
|
||
|
|
||
|
} else {
|
||
|
$config = new Zend_Config(array(
|
||
|
'adapter' => 'mysqli',
|
||
|
'params' => array(
|
||
|
'host' => $host,
|
||
|
'username'=> $user,
|
||
|
'password'=> $password,
|
||
|
'dbname'=> $database,
|
||
|
'driver_options' => array(
|
||
|
MYSQLI_INIT_COMMAND => "SET NAMES utf8",
|
||
|
),
|
||
|
),
|
||
|
));
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
$this->db = Zend_Db::factory($config);
|
||
|
} catch ( Exception $e ) {
|
||
|
file_put_contents('debug.log', $e->getMessage()."\n", FILE_APPEND);
|
||
|
exit;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* INSERTION d'un tableau dans une table.
|
||
|
* Les index doivent avoir les mêmes noms que les champs.
|
||
|
* @param string Table
|
||
|
* @param array Valeurs insérer
|
||
|
* @return int Dernière valeur de l'auto-incrément, 1 si pas d'auto-incrément et 0 si erreur
|
||
|
*/
|
||
|
public function insert($table, $toAdd, $debug=false, $low_priority=false)
|
||
|
{
|
||
|
$fields = implode(array_keys($toAdd), '`,`');
|
||
|
foreach (array_values($toAdd) as $key=>$array_values)
|
||
|
$tmp[$key]=checkaddslashes($array_values);
|
||
|
|
||
|
$values = "'".implode(array_values($tmp), "','")."'"; # better
|
||
|
$values = str_replace("'NULL'", 'NULL', $values);
|
||
|
|
||
|
if ($low_priority)
|
||
|
$query = 'INSERT DELAYED INTO `'.$table.'` (`'.$fields.'`) VALUES ('.$values.');';
|
||
|
else
|
||
|
$query = 'INSERT INTO `'.$table.'` (`'.$fields.'`) VALUES ('.$values.');';
|
||
|
|
||
|
if ($debug) $tdeb=microtime_float();
|
||
|
|
||
|
try {
|
||
|
$stmt = $this->db->query($query, $debug);
|
||
|
$res = $this->db->lastInsertId();
|
||
|
if ( $res == 0 ) {
|
||
|
$res = true;
|
||
|
}
|
||
|
} catch(Zend_Db_Exception $e) {
|
||
|
$this->errorCode = $e->getCode();
|
||
|
$this->errorMsg = $e->getMessage();
|
||
|
|
||
|
$res = false;
|
||
|
}
|
||
|
|
||
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||
|
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @param unknown $table
|
||
|
* @param unknown $update
|
||
|
* @param unknown $where
|
||
|
* @param string $debug
|
||
|
* @param number $limit
|
||
|
* @param string $low_priority
|
||
|
* @return resource
|
||
|
*/
|
||
|
public function update($table, $update, $where, $debug=false, $limit=0, $low_priority=false)
|
||
|
{
|
||
|
$fields = array_keys($update);
|
||
|
$values = array_values($update);
|
||
|
$i=0;
|
||
|
if ($low_priority)
|
||
|
$query='UPDATE LOW_PRIORITY `'.$table.'` SET ';
|
||
|
else
|
||
|
$query='UPDATE `'.$table.'` SET ';
|
||
|
while(isset($fields[$i])){
|
||
|
if($i>0) { $query.=', '; }
|
||
|
$query.=' `'.$fields[$i]."`='".checkaddslashes($values[$i])."'";
|
||
|
$i++;
|
||
|
}
|
||
|
$query = str_replace("'NULL'", 'NULL', $query);
|
||
|
$query.=' WHERE '.$where;
|
||
|
if ($limit>0) $query.=" LIMIT $limit";
|
||
|
|
||
|
if ($debug) $tdeb=microtime_float();
|
||
|
|
||
|
try {
|
||
|
$stmt = $this->db->query($query, $debug);
|
||
|
$res = $this->db->lastInsertId();
|
||
|
if ( $res == 0 ) {
|
||
|
$res = true;
|
||
|
}
|
||
|
} catch(Zend_Db_Exception $e) {
|
||
|
$this->errorCode = $e->getCode();
|
||
|
$this->errorMsg = $e->getMessage();
|
||
|
|
||
|
$res = false;
|
||
|
}
|
||
|
|
||
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||
|
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @param unknown $table
|
||
|
* @param unknown $where
|
||
|
* @param string $debug
|
||
|
* @param string $low_priority
|
||
|
* @return resource
|
||
|
*/
|
||
|
public function delete($table, $where, $debug=false, $low_priority=false)
|
||
|
{
|
||
|
if ($low_priority)
|
||
|
$query='DELETE LOW_PRIORITY QUICK FROM `'.$table.'` WHERE '.$where.' LIMIT 1;';
|
||
|
else
|
||
|
$query='DELETE FROM `'.$table.'` WHERE '.$where.' LIMIT 1;';
|
||
|
|
||
|
if ($debug) $tdeb=microtime_float();
|
||
|
|
||
|
try {
|
||
|
$stmt = $this->db->query($query, $debug);
|
||
|
$res = $this->db->lastInsertId();
|
||
|
if ( $res == 0 ) {
|
||
|
$res = true;
|
||
|
}
|
||
|
} catch(Zend_Db_Exception $e) {
|
||
|
$this->errorCode = $e->getCode();
|
||
|
$this->errorMsg = $e->getMessage();
|
||
|
|
||
|
$res = false;
|
||
|
}
|
||
|
|
||
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||
|
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @param string $table
|
||
|
* @param string $fields
|
||
|
* @param string $where
|
||
|
* @param string $debug
|
||
|
* @param string $assoc
|
||
|
* @param string $huge
|
||
|
* @return boolean|multitype:multitype: |number
|
||
|
*/
|
||
|
public function select($table, $fields, $where, $debug=false, $assoc=MYSQL_BOTH, $huge=false)
|
||
|
{
|
||
|
$query="SELECT $fields FROM $table WHERE $where;";
|
||
|
|
||
|
if ($debug) $tdeb=microtime_float();
|
||
|
|
||
|
try {
|
||
|
$stmt = $this->db->query($query);
|
||
|
} catch(Zend_Db_Exception $e) {
|
||
|
$this->errorCode = $e->getCode();
|
||
|
$this->errorMsg = $e->getMessage();
|
||
|
|
||
|
$fpErr = fopen(LOG_PATH.'/sqlerror.log','a');
|
||
|
fwrite($fpErr, date('YmdHis'). ' - '.$query .EOL);
|
||
|
fwrite($fpErr, date('YmdHis'). ' - '.$e->getCode().' - '. $e->getMessage().PHP_EOL);
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if ( !$huge ) {
|
||
|
switch($assoc) {
|
||
|
case MYSQL_NUM:
|
||
|
$mode = Zend_Db::FETCH_NUM;
|
||
|
break;
|
||
|
case MYSQL_ASSOC:
|
||
|
$mode = Zend_Db::FETCH_ASSOC;
|
||
|
break;
|
||
|
case MYSQL_BOTH:
|
||
|
$mode = Zend_Db::FETCH_BOTH;
|
||
|
break;
|
||
|
}
|
||
|
$tab = $stmt->fetchAll($mode);
|
||
|
if ($debug) $this->trace($query, sizeof($tab), $tdeb);
|
||
|
return $tab;
|
||
|
} else {
|
||
|
$nbRows = $stmt->rowCount();
|
||
|
if ($debug) $this->trace($query, $nbRows, $tdeb);
|
||
|
return $nbRows;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @param string $assoc
|
||
|
* @return multitype:
|
||
|
*/
|
||
|
public function fetch($assoc=MYSQL_BOTH)
|
||
|
{
|
||
|
switch($assoc) {
|
||
|
case MYSQL_NUM:
|
||
|
$mode = Zend_Db::FETCH_NUM;
|
||
|
break;
|
||
|
case MYSQL_ASSOC:
|
||
|
$mode = Zend_Db::FETCH_ASSOC;
|
||
|
break;
|
||
|
case MYSQL_BOTH:
|
||
|
$mode = Zend_Db::FETCH_BOTH;
|
||
|
break;
|
||
|
}
|
||
|
return $this->result->fetch($mode);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Trace
|
||
|
* @param string $query
|
||
|
* @param string $error
|
||
|
* @param int $tdeb
|
||
|
*/
|
||
|
public function trace($query, $res='', $tdeb = null)
|
||
|
{
|
||
|
|
||
|
if ( $tdeb === null) {
|
||
|
$duree = substr(''.microtime_float()-$tdeb, 0, 5);
|
||
|
} else {
|
||
|
$duree = 'N/D';
|
||
|
}
|
||
|
file_put_contents(LOG_PATH . '/mysql_debug.log', date('Y/m/d - H:i:s') ." - ".$this->errorCode.":".$this->errorMsg." - $duree - $query\n", FILE_APPEND);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Exécute la requête passé en paramètre
|
||
|
*/
|
||
|
public function query($query, $debug=false)
|
||
|
{
|
||
|
try {
|
||
|
$stmt = $this->db->query($query);
|
||
|
$this->result = $stmt;
|
||
|
} catch(Zend_Db_Exception $e) {
|
||
|
$this->errorCode = $e->getCode();
|
||
|
$this->errorMsg = $e->getMessage();
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return $this->result;
|
||
|
}
|
||
|
|
||
|
/** Retourne le libellé de la dernière erreur **/
|
||
|
public function getLastErrorMsg()
|
||
|
{
|
||
|
return $this->errorMsg;
|
||
|
}
|
||
|
/**
|
||
|
* Retourne le numéro de la dernière erreur
|
||
|
*/
|
||
|
public function getLastErrorNum()
|
||
|
{
|
||
|
return $this->errorCode;
|
||
|
}
|
||
|
|
||
|
/** Retourne le libellé et le numéro de la dernière erreur **/
|
||
|
public function getLastError()
|
||
|
{
|
||
|
return $this->errorMsg.' ('.$this->errorCode.')';
|
||
|
}
|
||
|
|
||
|
/** Retourne le nombre de lignes modifiées par la dernière requête **/
|
||
|
public function getAffectedRows()
|
||
|
{
|
||
|
return $this->result->rowCount();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Génère le fichier CSV pour la requete SQL
|
||
|
*
|
||
|
* @param string $query
|
||
|
* @param string $fileCsv
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function exportCSV($query, $fileCsv, $sep=',', $eol=EOL)
|
||
|
{
|
||
|
$i = 0;
|
||
|
$fp = fopen($fileCsv, 'w');
|
||
|
if (!$fp) return false;
|
||
|
|
||
|
$res = $this->query($query);
|
||
|
$nbLignes = mysql_num_rows($res);
|
||
|
while ($ligne=$this->fetch(MYSQL_ASSOC)) {
|
||
|
//Header
|
||
|
if ($i==0) {
|
||
|
$nbCols = count($ligne);
|
||
|
$fields = array();
|
||
|
$header = array();
|
||
|
foreach ($ligne as $libCol=>$col) {
|
||
|
$header[] = $libCol;
|
||
|
$fields[] = $col;
|
||
|
}
|
||
|
fputcsv($fp, $header, $sep, '"');
|
||
|
fputcsv($fp, $fields, $sep, '"');
|
||
|
}
|
||
|
//Content
|
||
|
else {
|
||
|
$fields = array();
|
||
|
foreach ($ligne as $libCol=>$col) {
|
||
|
$fields[] = $col;
|
||
|
}
|
||
|
fputcsv($fp, $fields, $sep, '"');
|
||
|
}
|
||
|
$i++;
|
||
|
}
|
||
|
fclose($fp);
|
||
|
return $nbLignes;
|
||
|
}
|
||
|
}
|
||
|
?>
|