KumbiaPHP beta2-dev
Framework PHP en español
mysql.php
Ir a la documentación de este archivo.
00001 <?php
00023 class DbMySQL extends DbBase implements DbBaseInterface  {
00024 
00030         public $id_connection;
00031 
00037         public $last_result_query;
00038 
00044         private $last_query;
00045 
00051         public $last_error;
00052 
00057         const DB_ASSOC = MYSQL_ASSOC;
00058 
00063         const DB_BOTH = MYSQL_BOTH;
00064 
00069         const DB_NUM = MYSQL_NUM;
00070 
00075         const TYPE_INTEGER = 'INTEGER';
00076 
00081         const TYPE_DATE = 'DATE';
00082 
00087         const TYPE_VARCHAR = 'VARCHAR';
00088 
00093         const TYPE_DECIMAL = 'DECIMAL';
00094 
00099         const TYPE_DATETIME = 'DATETIME';
00100 
00105         const TYPE_CHAR = 'CHAR';
00106 
00113         public function connect($config){
00114         
00115                 if(!extension_loaded('mysql')){
00116                         throw new KumbiaException('Debe cargar la extensión de PHP llamada php_mysql');
00117                 }
00118                 if(!isset($config['port']) || !$config['port']) {
00119                         $config['port'] = 3306;
00120                 }
00121                 
00122                 if($this->id_connection = mysql_connect("{$config['host']}:{$config['port']}", $config['username'], $config['password'], true)){
00123                         if($config['name']!=='') {
00124                                 if(!mysql_select_db($config['name'], $this->id_connection)){
00125                                         throw new KumbiaException($this->error());
00126                                 }
00127                         }
00128                         //Selecciona charset
00129                         if(isset($config['charset'])){
00130                                 mysql_query("SET NAMES {$config['charset']}");
00131                                 //mysql_set_charset($config['charset'],$this->id_connection); //Necesita mysql > 5.0.7
00132                         }
00133                         return true;
00134                 } else {
00135                         throw new KumbiaException($this->error());
00136                 }
00137         }
00138 
00145         public function query($sql_query){
00146                 $this->debug($sql_query);
00147         if($this->logger){
00148             Logger::debug($sql_query);
00149         }
00150                 if(!$this->id_connection){
00151                         $this->connect();
00152                         if(!$this->id_connection){
00153                                 return false;
00154                         }
00155                 }
00156 
00157                 $this->last_query = $sql_query;
00158                 if($result_query = mysql_query($sql_query, $this->id_connection)){
00159                         $this->last_result_query = $result_query;
00160                         return $result_query;
00161                 } else {
00162                         $this->last_result_query = false;
00163                         throw new KumbiaException($this->error(" al ejecutar <em>\"$sql_query\"</em>"));
00164                 }
00165         }
00166 
00170         public function close(){
00171                 if($this->id_connection) {
00172                         return mysql_close();
00173                 }
00174                 return false;
00175         }
00176 
00184         public function fetch_array($result_query='', $opt=MYSQL_BOTH){
00185                 if(!$this->id_connection){
00186                         return false;
00187                 }
00188                 if(!$result_query){
00189                         $result_query = $this->last_result_query;
00190                         if(!$result_query){
00191                                 return false;
00192                         }
00193                 }
00194                 return mysql_fetch_array($result_query, $opt);
00195         }
00196 
00202         public function __construct($config){
00203                 $this->connect($config);
00204         }
00205 
00209         public function num_rows($result_query=''){
00210                 if(!$this->id_connection){
00211                         return false;
00212                 }
00213                 if(!$result_query){
00214                         $result_query = $this->last_result_query;
00215                         if(!$result_query){
00216                                 return false;
00217                         }
00218                 }
00219                 if(($number_rows = mysql_num_rows($result_query))!==false){
00220                         return $number_rows;
00221                 } else {
00222                         throw new KumbiaException($this->error());
00223                 }
00224                 return false;
00225         }
00226 
00234         public function field_name($number, $result_query=''){
00235                 if(!$this->id_connection){
00236                         return false;
00237                 }
00238                 if(!$result_query){
00239                         $result_query = $this->last_result_query;
00240                         if(!$result_query){
00241                                 return false;
00242                         }
00243                 }
00244                 if(($fieldName = mysql_field_name($result_query, $number))!==false){
00245                         return $fieldName;
00246                 } else {
00247                         throw new KumbiaException($this->error());
00248                 }
00249                 return false;
00250         }
00251 
00252 
00260         public function data_seek($number, $result_query=''){
00261                 if(!$result_query){
00262                         $result_query = $this->last_result_query;
00263                         if(!$result_query){
00264                                 return false;
00265                         }
00266                 }
00267                 if(($success = mysql_data_seek($result_query, $number))!==false){
00268                         return $success;
00269                 } else {
00270                         throw new KumbiaException($this->error());
00271                 }
00272                 return false;
00273         }
00274 
00281         public function affected_rows($result_query=''){
00282                 if(($numberRows = mysql_affected_rows())!==false){
00283                         return $numberRows;
00284                 } else {
00285                         $this->lastError = $this->error();
00286                         throw new KumbiaException($this->error());
00287                 }
00288                 return false;
00289         }
00290 
00296         public function error($err=''){
00297                 if(!$this->id_connection){
00298                         $this->last_error = mysql_error() ? mysql_error() : "[Error Desconocido en MySQL: $err]";
00299             if($this->logger){
00300                 Logger::error($this->last_error);
00301             }
00302                         return $this->last_error;
00303                 }
00304                 $this->last_error = mysql_error() ? mysql_error() : "[Error Desconocido en MySQL: $err]";
00305                 $this->last_error.= $err;
00306         if($this->logger){
00307             Logger::error($this->last_error);
00308         }
00309                 return $this->last_error;
00310         }
00311 
00317         public function no_error(){
00318                 if(!$this->id_connection){
00319                         return false;
00320                 }
00321                 return mysql_errno();
00322         }
00323 
00329         public function last_insert_id($table='', $primary_key=''){
00330                 if(!$this->id_connection){
00331                         return false;
00332                 }
00333                 return mysql_insert_id($this->id_connection);
00334         }
00335 
00342         public function table_exists($table, $schema=''){
00343                 $table = addslashes("$table");
00344                 if($schema==''){
00345                         $num = $this->fetch_one("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '$table'");
00346                 } else {
00347                         $schema = addslashes("$schema");
00348                         $num = $this->fetch_one("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '$table' AND TABLE_SCHEMA = '$schema'");
00349                 }
00350                 return $num[0];
00351         }
00352 
00359         public function limit($sql){
00360                 $params = Util::getParams(func_get_args());
00361                 $sql_new = $sql;
00362         
00363                 if(isset($params['limit']) && is_numeric($params['limit'])){
00364                         $sql_new.=" LIMIT $params[limit]";
00365                 }
00366                 
00367                 if(isset($params['offset']) && is_numeric($params['offset'])){
00368                         $sql_new.=" OFFSET $params[offset]";
00369                 }
00370                 
00371                 return $sql_new;
00372         }
00373 
00380         public function drop_table($table, $if_exists=true){
00381                 if($if_exists){
00382                         return $this->query("DROP TABLE IF EXISTS $table");
00383                 } else {
00384                         return $this->query("DROP TABLE $table");
00385                 }
00386         }
00387 
00401         public function create_table($table, $definition, $index=array()){
00402                 $create_sql = "CREATE TABLE $table (";
00403                 if(!is_array($definition)){
00404                         throw new KumbiaException("Definición invalida para crear la tabla '$table'");
00405                 }
00406                 $create_lines = array();
00407                 $index = array();
00408                 $unique_index = array();
00409                 $primary = array();
00410                 $not_null = "";
00411                 $size = "";
00412                 foreach($definition as $field => $field_def){
00413                         if(isset($field_def['not_null'])){
00414                                 $not_null = $field_def['not_null'] ? 'NOT NULL' : '';
00415                         } else {
00416                                 $not_null = "";
00417                         }
00418                         if(isset($field_def['size'])){
00419                                 $size = $field_def['size'] ? '('.$field_def['size'].')' : '';
00420                         } else {
00421                                 $size = "";
00422                         }
00423                         if(isset($field_def['index'])){
00424                                 if($field_def['index']){
00425                                         $index[] = "INDEX(`$field`)";
00426                                 }
00427                         }
00428                         if(isset($field_def['unique_index'])){
00429                                 if($field_def['unique_index']){
00430                                         $index[] = "UNIQUE(`$field`)";
00431                                 }
00432                         }
00433                         if(isset($field_def['primary'])){
00434                                 if($field_def['primary']){
00435                                         $primary[] = "`$field`";
00436                                 }
00437                         }
00438                         if(isset($field_def['auto'])){
00439                                 if($field_def['auto']){
00440                                         $field_def['extra'] = isset($field_def['extra']) ? $field_def['extra']." AUTO_INCREMENT" :  "AUTO_INCREMENT";
00441                                 }
00442                         }
00443                         if(isset($field_def['extra'])){
00444                                 $extra = $field_def['extra'];
00445                         } else {
00446                                 $extra = "";
00447                         }
00448                         $create_lines[] = "`$field` ".$field_def['type'].$size.' '.$not_null.' '.$extra;
00449                 }
00450                 $create_sql.= join(',', $create_lines);
00451                 $last_lines = array();
00452                 if(count($primary)){
00453                         $last_lines[] = 'PRIMARY KEY('.join(",", $primary).')';
00454                 }
00455                 if(count($index)){
00456                         $last_lines[] = join(',', $index);
00457                 }
00458                 if(count($unique_index)){
00459                         $last_lines[] = join(',', $unique_index);
00460                 }
00461                 if(count($last_lines)){
00462                         $create_sql.= ','.join(',', $last_lines).')';
00463                 }
00464                 return $this->query($create_sql);
00465 
00466         }
00467 
00473         public function list_tables(){
00474                 return $this->fetch_all("SHOW TABLES");
00475         }
00476 
00483         public function describe_table($table, $schema=''){
00484                 if($schema==''){
00485                         return $this->fetch_all("DESCRIBE `$table`");
00486                 } else {
00487                         return $this->fetch_all("DESCRIBE `$schema`.`$table`");
00488                 }
00489         }
00490     
00498         public function fetch_object($result_query=null, $class='stdClass'){
00499                 if(!$result_query){
00500                         $result_query = $this->last_result_query;
00501                 }
00502                 return mysql_fetch_object($result_query, $class);
00503         }
00504 }
 Todo Estructuras de Datos Namespaces Archivos Funciones Variables Enumeraciones