KumbiaPHP beta2-dev
Framework PHP en español
mysqli.php
Ir a la documentación de este archivo.
00001 <?php
00023 class DbMySQLi extends DbBase implements DbBaseInterface  {
00024 
00030         public $id_connection;
00031 
00037         public $last_result_query;
00038 
00044         private $last_query;
00050         public $last_error;
00051 
00056         const DB_ASSOC = MYSQLI_ASSOC;
00057 
00062         const DB_BOTH = MYSQLI_BOTH;
00063 
00068         const DB_NUM = MYSQLI_NUM;
00069 
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('mysqli')){
00116                         throw new KumbiaException('Debe cargar la extensión de PHP llamada php_mysqli');
00117                 }
00118 
00119                 $this->id_connection = new mysqli($config['host'], $config['username'], $config['password'], $config['name'], $config['port']);
00120                 if(mysqli_connect_error()) { //no se usa $object->error() ya que solo funciona a partir de 5.2.9 y 5.3
00121                         throw new KumbiaException(mysqli_connect_error());
00122                 } else {
00123                         //Selecciona charset
00124                         if(isset($config['charset'])){
00125                                 $this->id_connection->set_charset($config['charset']);
00126                         }
00127                         return TRUE;
00128                 }
00129         }
00130 
00137         public function query($sql_query){
00138                 $this->debug($sql_query);
00139         if($this->logger){
00140             Logger::debug($sql_query);
00141         }
00142                 if(!$this->id_connection){
00143                         $this->connect();
00144                         if(!$this->id_connection){
00145                                 return false;
00146                         }
00147                 }
00148                 $this->last_query = $sql_query;
00149                 if($result_query = mysqli_query($this->id_connection, $sql_query)){
00150                         $this->last_result_query = $result_query;
00151                         return $result_query;
00152                 } else {
00153                         $this->last_result_query = false;
00154                         throw new KumbiaException($this->error(" al ejecutar <em>\"$sql_query\"</em>"));
00155                 }
00156         }
00157 
00163         public function close(){
00164                 if($this->id_connection) {
00165                         return mysqli_close($this->id_connection);
00166                 }
00167         }
00168 
00176         public function fetch_array($result_query='', $opt=MYSQLI_BOTH){
00177                 if(!$this->id_connection){
00178                         return false;
00179                 }
00180                 if(!$result_query){
00181                         $result_query = $this->last_result_query;
00182                         if(!$result_query){
00183                                 return false;
00184                         }
00185                 }
00186                 return mysqli_fetch_array($result_query, $opt);
00187         }
00188 
00194         public function __construct($config){
00195                 $this->connect($config);
00196         }
00197 
00201         public function num_rows($result_query=''){
00202                 if(!$this->id_connection){
00203                         return false;
00204                 }
00205                 if(!$result_query){
00206                         $result_query = $this->last_result_query;
00207                         if(!$result_query){
00208                                 return false;
00209                         }
00210                 }
00211                 if(($number_rows = mysqli_num_rows($result_query))!==false){
00212                         return $number_rows;
00213                 } else {
00214                         throw new KumbiaException($this->error());
00215                 }
00216                 return false;
00217         }
00218 
00226         public function field_name($number, $result_query=''){
00227                 if(!$this->id_connection){
00228                         return false;
00229                 }
00230                 if(!$result_query){
00231                         $result_query = $this->last_result_query;
00232                         if(!$result_query){
00233                                 return false;
00234                         }
00235                 }
00236                 if(($fieldName = mysqli_field_seek($result_query, $number))!==false){
00237                         $field = mysqli_fetch_field($result_query);
00238                         return $field->name;
00239                 } else {
00240                         throw new KumbiaException($this->error());
00241                 }
00242                 return false;
00243         }
00244 
00245 
00253         public function data_seek($number, $result_query=''){
00254                 if(!$result_query){
00255                         $result_query = $this->last_result_query;
00256                         if(!$result_query){
00257                                 return false;
00258                         }
00259                 }
00260                 if(($success = mysqli_data_seek($result_query, $number))!==false){
00261                         return $success;
00262                 } else {
00263                         throw new KumbiaException($this->error());
00264                 }
00265                 return false;
00266         }
00267 
00274         public function affected_rows($result_query=''){
00275                 if(($numberRows = mysqli_affected_rows($this->id_connection))!==false){
00276                         return $numberRows;
00277                 } else {
00278                         throw new KumbiaException($this->error());
00279                 }
00280                 return false;
00281         }
00282 
00288         public function error($err=''){
00289                 $this->last_error = mysqli_error($this->id_connection) ? mysqli_error($this->id_connection) : "[Error Desconocido en MySQL: $err]";
00290                 $this->last_error.= $err;
00291         if($this->logger){
00292             Logger::error($this->last_error);
00293         }
00294                 return $this->last_error;
00295         }
00296 
00302         public function no_error(){
00303                 return mysqli_errno($this->id_connection);
00304         }
00305 
00311         public function last_insert_id($table='', $primary_key=''){
00312                 if(!$this->id_connection){
00313                         return false;
00314                 }
00315                 return mysqli_insert_id($this->id_connection);
00316         }
00317 
00324         public function table_exists($table, $schema=''){
00325                 $table = addslashes("$table");
00326                 if($schema==''){
00327                         $num = $this->fetch_one("select count(*) from information_schema.tables where table_name = '$table'");
00328                 } else {
00329                         $schema = addslashes("$schema");
00330                         $num = $this->fetch_one("select count(*) from information_schema.tables where table_name = '$table' and table_schema = '$schema'");
00331                 }
00332                 return $num[0];
00333         }
00334 
00341         public function limit($sql){
00342                 $params = Util::getParams(func_get_args());
00343                 $sql_new = $sql;
00344         
00345                 if(isset($params['limit']) && is_numeric($params['limit'])){
00346                         $sql_new.=" LIMIT $params[limit]";
00347                 }
00348                 
00349                 if(isset($params['offset']) && is_numeric($params['offset'])){
00350                         $sql_new.=" OFFSET $params[offset]";
00351                 }
00352                 
00353                 return $sql_new;
00354         }
00355 
00362         public function drop_table($table, $if_exists=true){
00363                 if($if_exists){
00364                         return $this->query("DROP TABLE IF EXISTS $table");
00365                 } else {
00366                         return $this->query("DROP TABLE $table");
00367                 }
00368         }
00369 
00383         public function create_table($table, $definition, $index=array()){
00384                 $create_sql = "CREATE TABLE $table (";
00385                 if(!is_array($definition)){
00386                         throw new KumbiaException("Definición invalida para crear la tabla '$table'");
00387                 }
00388                 $create_lines = array();
00389                 $index = array();
00390                 $unique_index = array();
00391                 $primary = array();
00392                 $not_null = "";
00393                 $size = "";
00394                 foreach($definition as $field => $field_def){
00395                         if(isset($field_def['not_null'])){
00396                                 $not_null = $field_def['not_null'] ? 'NOT NULL' : '';
00397                         } else {
00398                                 $not_null = "";
00399                         }
00400                         if(isset($field_def['size'])){
00401                                 $size = $field_def['size'] ? '('.$field_def['size'].')' : '';
00402                         } else {
00403                                 $size = "";
00404                         }
00405                         if(isset($field_def['index'])){
00406                                 if($field_def['index']){
00407                                         $index[] = "INDEX(`$field`)";
00408                                 }
00409                         }
00410                         if(isset($field_def['unique_index'])){
00411                                 if($field_def['unique_index']){
00412                                         $index[] = "UNIQUE(`$field`)";
00413                                 }
00414                         }
00415                         if(isset($field_def['primary'])){
00416                                 if($field_def['primary']){
00417                                         $primary[] = "`$field`";
00418                                 }
00419                         }
00420                         if(isset($field_def['auto'])){
00421                                 if($field_def['auto']){
00422                                         $field_def['extra'] = isset($field_def['extra']) ? $field_def['extra']." AUTO_INCREMENT" :  "AUTO_INCREMENT";
00423                                 }
00424                         }
00425                         if(isset($field_def['extra'])){
00426                                 $extra = $field_def['extra'];
00427                         } else {
00428                                 $extra = "";
00429                         }
00430                         $create_lines[] = "`$field` ".$field_def['type'].$size.' '.$not_null.' '.$extra;
00431                 }
00432                 $create_sql.= join(',', $create_lines);
00433                 $last_lines = array();
00434                 if(count($primary)){
00435                         $last_lines[] = 'PRIMARY KEY('.join(",", $primary).')';
00436                 }
00437                 if(count($index)){
00438                         $last_lines[] = join(',', $index);
00439                 }
00440                 if(count($unique_index)){
00441                         $last_lines[] = join(',', $unique_index);
00442                 }
00443                 if(count($last_lines)){
00444                         $create_sql.= ','.join(',', $last_lines).')';
00445                 }
00446                 return $this->query($create_sql);
00447 
00448         }
00449 
00455         public function list_tables(){
00456                 return $this->fetch_all("SHOW TABLES");
00457         }
00458 
00465         public function describe_table($table, $schema=''){
00466                 if($schema==''){
00467                         return $this->fetch_all("DESCRIBE `$table`");
00468                 } else {
00469                         return $this->fetch_all("DESCRIBE `$schema`.`$table`");
00470                 }
00471     }
00472 }
 Todo Estructuras de Datos Namespaces Archivos Funciones Variables Enumeraciones