KumbiaPHP  beta2
Framework PHP
 Todo Estructuras de Datos Namespaces Archivos Funciones Variables Páginas
mysqli.php
Ir a la documentación de este archivo.
1 <?php
29 class DbMySQLi extends DbBase implements DbBaseInterface
30 {
31 
49  protected $last_query;
55  public $last_error;
56 
61  const DB_ASSOC = MYSQLI_ASSOC;
62 
67  const DB_BOTH = MYSQLI_BOTH;
68 
73  const DB_NUM = MYSQLI_NUM;
74 
75 
80  const TYPE_INTEGER = 'INTEGER';
81 
86  const TYPE_DATE = 'DATE';
87 
92  const TYPE_VARCHAR = 'VARCHAR';
93 
98  const TYPE_DECIMAL = 'DECIMAL';
99 
104  const TYPE_DATETIME = 'DATETIME';
105 
110  const TYPE_CHAR = 'CHAR';
111 
118  public function connect($config)
119  {
120  if (!extension_loaded('mysqli')) throw new KumbiaException('Debe cargar la extensión de PHP llamada php_mysqli');
121 
122  $this->id_connection = new mysqli($config['host'], $config['username'], $config['password'], $config['name'], $config['port']);
123  //no se usa $object->error() ya que solo funciona a partir de 5.2.9 y 5.3
124  if (mysqli_connect_error ()) throw new KumbiaException(mysqli_connect_error());
125  //Selecciona charset
126  if (isset($config['charset'])) $this->id_connection->set_charset($config['charset']);
127  return TRUE;
128  }
129 
136  public function query($sql_query)
137  {
138  $this->debug($sql_query);
139  if ($this->logger) {
140  Logger::debug($sql_query);
141  }
142 
143  $this->last_query = $sql_query;
144  if ($result_query = mysqli_query($this->id_connection, $sql_query)) {
145  $this->last_result_query = $result_query;
146  return $result_query;
147  } else {
148  throw new KumbiaException($this->error(" al ejecutar <em>\"$sql_query\"</em>"));
149  }
150  }
151 
157  public function close()
158  {
159  if ($this->id_connection) {
160  return mysqli_close($this->id_connection);
161  }
162  }
163 
171  public function fetch_array($result_query='', $opt=MYSQLI_BOTH)
172  {
173  if (!$result_query) {
174  $result_query = $this->last_result_query;
175  if (!$result_query) {
176  return false;
177  }
178  }
179  return mysqli_fetch_array($result_query, $opt);
180  }
181 
187  public function __construct($config)
188  {
189  $this->connect($config);
190  }
191 
195  public function num_rows($result_query='')
196  {
197  if (!$result_query) {
198  $result_query = $this->last_result_query;
199  if (!$result_query) {
200  return false;
201  }
202  }
203  if (($number_rows = mysqli_num_rows($result_query)) !== false) {
204  return $number_rows;
205  } else {
206  throw new KumbiaException($this->error());
207  }
208  }
209 
217  public function field_name($number, $result_query='')
218  {
219 
220  if (!$result_query) {
221  $result_query = $this->last_result_query;
222  if (!$result_query) {
223  return false;
224  }
225  }
226  if (($fieldName = mysqli_field_seek($result_query, $number)) !== false) {
227  $field = mysqli_fetch_field($result_query);
228  return $field->name;
229  } else {
230  throw new KumbiaException($this->error());
231  }
232  }
233 
241  public function data_seek($number, $result_query='')
242  {
243  if (!$result_query) {
244  $result_query = $this->last_result_query;
245  if (!$result_query) {
246  return false;
247  }
248  }
249  if (($success = mysqli_data_seek($result_query, $number)) !== false) {
250  return $success;
251  } else {
252  throw new KumbiaException($this->error());
253  }
254  }
255 
262  public function affected_rows($result_query='')
263  {
264  if (($numberRows = mysqli_affected_rows($this->id_connection)) !== false) {
265  return $numberRows;
266  } else {
267  throw new KumbiaException($this->error());
268  }
269  }
270 
276  public function error($err='')
277  {
278  $this->last_error = mysqli_error($this->id_connection) ? mysqli_error($this->id_connection) : "[Error Desconocido en MySQL: $err]";
279  $this->last_error.= $err;
280  if ($this->logger) {
281  Logger::error($this->last_error);
282  }
283  return $this->last_error;
284  }
285 
291  public function no_error()
292  {
293  return mysqli_errno($this->id_connection);
294  }
295 
301  public function last_insert_id($table='', $primary_key='')
302  {
303  return mysqli_insert_id($this->id_connection);
304  }
305 
312  public function table_exists($table, $schema='')
313  {
314  $table = addslashes("$table");
315  if ($schema == '') {
316  $num = $this->fetch_one("select count(*) from information_schema.tables where table_name = '$table'");
317  } else {
318  $schema = addslashes("$schema");
319  $num = $this->fetch_one("select count(*) from information_schema.tables where table_name = '$table' and table_schema = '$schema'");
320  }
321  return $num[0];
322  }
323 
330  public function limit($sql)
331  {
332  $params = Util::getParams(func_get_args());
333  $sql_new = $sql;
334 
335  if (isset($params['limit']) && is_numeric($params['limit'])) {
336  $sql_new.=" LIMIT $params[limit]";
337  }
338 
339  if (isset($params['offset']) && is_numeric($params['offset'])) {
340  $sql_new.=" OFFSET $params[offset]";
341  }
342 
343  return $sql_new;
344  }
345 
352  public function drop_table($table, $if_exists=true)
353  {
354  if ($if_exists) {
355  return $this->query("DROP TABLE IF EXISTS $table");
356  } else {
357  return $this->query("DROP TABLE $table");
358  }
359  }
360 
374  public function create_table($table, $definition, $index=array())
375  {
376  $create_sql = "CREATE TABLE $table (";
377  if (!is_array($definition)) {
378  throw new KumbiaException("Definición invalida para crear la tabla '$table'");
379  }
380  $create_lines = array();
381  $index = array();
382  $unique_index = array();
383  $primary = array();
384  //$not_null = "";
385  //$size = "";
386  foreach ($definition as $field => $field_def) {
387  if (isset($field_def['not_null'])) {
388  $not_null = $field_def['not_null'] ? 'NOT NULL' : '';
389  } else {
390  $not_null = "";
391  }
392  if (isset($field_def['size'])) {
393  $size = $field_def['size'] ? '(' . $field_def['size'] . ')' : '';
394  } else {
395  $size = "";
396  }
397  if (isset($field_def['index'])) {
398  if ($field_def['index']) {
399  $index[] = "INDEX(`$field`)";
400  }
401  }
402  if (isset($field_def['unique_index'])) {
403  if ($field_def['unique_index']) {
404  $index[] = "UNIQUE(`$field`)";
405  }
406  }
407  if (isset($field_def['primary'])) {
408  if ($field_def['primary']) {
409  $primary[] = "`$field`";
410  }
411  }
412  if (isset($field_def['auto'])) {
413  if ($field_def['auto']) {
414  $field_def['extra'] = isset($field_def['extra']) ? $field_def['extra'] . " AUTO_INCREMENT" : "AUTO_INCREMENT";
415  }
416  }
417  if (isset($field_def['extra'])) {
418  $extra = $field_def['extra'];
419  } else {
420  $extra = "";
421  }
422  $create_lines[] = "`$field` " . $field_def['type'] . $size . ' ' . $not_null . ' ' . $extra;
423  }
424  $create_sql.= join(',', $create_lines);
425  $last_lines = array();
426  if (count($primary)) {
427  $last_lines[] = 'PRIMARY KEY(' . join(",", $primary) . ')';
428  }
429  if (count($index)) {
430  $last_lines[] = join(',', $index);
431  }
432  if (count($unique_index)) {
433  $last_lines[] = join(',', $unique_index);
434  }
435  if (count($last_lines)) {
436  $create_sql.= ',' . join(',', $last_lines) . ')';
437  }
438  return $this->query($create_sql);
439  }
440 
446  public function list_tables()
447  {
448  return $this->fetch_all("SHOW TABLES");
449  }
450 
457  public function describe_table($table, $schema='')
458  {
459  if ($schema == '') {
460  return $this->fetch_all("DESCRIBE `$table`");
461  } else {
462  return $this->fetch_all("DESCRIBE `$schema`.`$table`");
463  }
464  }
465 
471  public function last_sql_query()
472  {
473  return $this->last_query;
474  }
475 
476 }