$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; } } ?>