Pedeo.php

  1. <?php
  2. defined('BASEPATH') OR exit('No direct script access allowed');
  3.  
  4. /*
  5. Envoltorio para PDO (Clase de acceso a base de datos de PHP)
  6. CodeIgniter library - Proinf.net - 2017
  7.  
  8. Los parámetros a los métodos se pueden pasar de 3 formas distintas:
  9. - Parámetros variables. Adecuado para parámetros SQL de posición "?"
  10. - Un array indexado. Ídem.
  11. - Un array asociativo. Adecuado para parámetros SQL por nombre ":"
  12.  
  13. */
  14. class Pedeo {
  15.  
  16. private $pdo;
  17.  
  18. public function __construct($params) {
  19. $this->pdo = $params[0];
  20. }
  21.  
  22. //-------------------------------------------
  23. // CONSULTA
  24.  
  25. /*
  26. Retorna un array indexado de arrays asociativos
  27. [
  28. [field1=>value1, field2=>value2, ...],
  29. [field1=>value1, field2=>value2, ...],
  30. ...
  31. ]
  32. Ejemplo1:
  33. $sql = "SELECT * FROM clientes WHERE pais=? AND empresa LIKE ?";
  34. $result = $pedeo->queryTable($sql, 'grecia', 'A%')
  35. Ejemplo2:
  36. $sql = "SELECT * FROM productos WHERE precio BETWEEN :minimo AND :maximo;
  37. $result = $pedeo->queryTable($sql, ['minimo'=>20, 'maximo'=>50]);
  38. */
  39. public function queryTable($sql, ...$params) {
  40. $params = self::scan_params($params);
  41. $result = $this->pdo->prepare($sql);
  42. $result->execute($params);
  43. $table = $result->fetchAll(PDO::FETCH_ASSOC);
  44. return $table;
  45. }
  46.  
  47. /*
  48. Retorna un array asociativo
  49. La consulta SQL debe tener exactamente 2 campos:
  50. - El primer campo es la clave
  51. - El segundo campo es el valor
  52. [
  53. value1=> value2,
  54. value1=> value2,
  55. ...
  56. ]
  57. */
  58. public function queryAssoc($sql, ...$params) {
  59. $params = self::scan_params($params);
  60. $result = $this->pdo->prepare($sql);
  61. $result->execute($params);
  62. $assoc = $result->fetchAll(PDO::FETCH_KEY_PAIR);
  63. return $assoc;
  64. }
  65.  
  66. /*
  67. Array asociativo del primer campo de arrays indexados de arrays asociativos
  68. [
  69. value1=> [
  70. [field2=>value2, field3=>value3, ...],
  71. ..
  72. ],
  73. value1=> [
  74. ...
  75. ],
  76. ...
  77. ]
  78. */
  79. public function queryGroup($sql, ...$params) {
  80. $params = self::scan_params($params);
  81. $result = $this->pdo->prepare($sql);
  82. $result->execute($params);
  83. $groups = $result->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
  84. return $groups;
  85. }
  86.  
  87. /*
  88. Retorna la primera fila en un array asociativo
  89. - El SQL debería retorna una sóla fila.
  90. [
  91. field1=>value1, field2=>value2, ...
  92. ]
  93. */
  94. public function queryRow($sql, ...$params) {
  95. $params = self::scan_params($params);
  96. $result = $this->pdo->prepare($sql);
  97. $result->execute($params);
  98. $row = $result->fetch(PDO::FETCH_ASSOC);
  99. return $row;
  100. }
  101.  
  102. /*
  103. Retorna un valor: la primera columna de la primera fila
  104. - El SQL debería retorna un campo y una fila.
  105. */
  106. public function queryValue($sql, ...$params) {
  107. $params = self::scan_params($params);
  108. $result = $this->pdo->prepare($sql);
  109. $result->execute($params);
  110. $row = $result->fetch(PDO::FETCH_NUM); // Array indexado
  111. $value = $row[0];
  112. return $value;
  113. }
  114.  
  115.  
  116. //-------------------------------------------
  117. // CRUD
  118.  
  119. /*
  120. Insertar un registro en una tabla
  121. */
  122. public function insertRow($sql, ...$params) {
  123. $params = self::scan_params($params);
  124. $result = $this->pdo->prepare($sql);
  125. if ($result->execute($params))
  126. return $this->pdo->lastInsertId();
  127. else return 0;
  128. }
  129.  
  130. /*
  131. Actualizar un registro en una tabla
  132. */
  133. public function updateRow($sql, ...$params) {
  134. $params = self::scan_params($params);
  135. $result = $this->pdo->prepare($sql);
  136. if ($result->execute($params))
  137. return $result->rowCount();
  138. else return 0;
  139. }
  140.  
  141. /*
  142. Borrar un registro en una tabla
  143. */
  144. public function deleteRow($sql, $id) {
  145. $result = $this->pdo->prepare($sql);
  146. if ($result->execute(array($id)))
  147. return $result->rowCount();
  148. else return 0;
  149. }
  150.  
  151. //----------------------------------------------
  152. // STATIC
  153.  
  154. /*
  155. Si el array params tiene un sólo elemento y este es un array lo retorna.
  156. Esto posibilita el paso de parámetros a los métodos:
  157. - por array indexado. Para parámetros SQL posicionales "?"
  158. - por array asociativo. Para parámetros SQL por nombre ":"
  159. */
  160. private static function scan_params($params) {
  161. if (count($params) == 1 && is_array($params[0])) return $params[0];
  162. else return $params;
  163. }
  164.  
  165. }
  166.  

Proinf.net