31/3/08

Usando y extendiendo PDO (I)

PDO (PHP Data Objects) es una librería estándard disponible a partir de PHP5.0 como extensión PECL y en PHP5.1 como librería de serie que se puede usar para acceder a distintas bases de datos.

Es un buen hábito usar los recursos del lenguaje sin dependencias adicionales, y en muchos servidores ya está disponible PHP5.2, así que disponer de PDO es bastante normal.

PDO ofrece una interfaz orientada a objetos que se puede extender con facilidad.

Existen numerosos ejemplos en internet sobre cómo usarla, así que no me extenderé en ello. Me centraré especialmente en cómo usar PDO para programar de forma sencilla y eficiente.

PDO define dos clases: PDO y PDOStatement.

Acceder al objeto PDO

Generalmente tendremos una única conexión con una base de datos y para acceder al objeto PDO de esa conexión desde cualquier sitio (incluido funciones) necesitaremos o bien una variable global o bien un campo estático con el objeto.

Generalmente la gente suele optar por una variable global tipo $dblink o similares. Y para acceder a ella genéricamente desde una función o desde el ámbito global, necesitaremos acceder a ella con la superglobal $GLOBALS: $GLOBALS['dblink'] o explicitando su uso mediante el keyword global: global $dblink;

Cualquiera de las dos soluciones es un poco engorrosa. Yo últimamente estoy usando la opción de campo estático y me está dando muy buenos resultados:

class db {
static
$db;
}

Para acceder al objeto PDO, bastaría con usar db::$db, que además de ser mas corto es mas fácil de escribir y tiene en parte un poco mas de sentido. Además usando la característica __autoload que ya he comentado, podemos hacer que se incluya a demanda la clase db y podemos hacer que en el fichero que esté definida la clase db, se encargue de hacer la conexión, de forma que mágicamente al acceder a db::$db obtendremos un objeto PDO con la conexión y si no, no se llegará a conectar (si no es necesario) y sin tener que estar con require_once o similares cada dos por tres.

Además podemos usar la clase db para ciertas utilidades SQL. Es bastante habitual hacer inserts sencillos o updates que cambien una sola fila mediante un id y similares. Así que en class db. Me he puesto un par de métodos estáticos para generar queries de UPDATE e INSERT dada una tabla, un array asociativo y para el caso del UPDATE, una condición.

En el caso del array asociativo del UPDATE tengo un caso especial que ocurre cuando el nombre de un campo empieza por '*', en cuyo caso el valor será una expresión (para cosas tipo NOW() y similares).

4 comentarios:

  1. Hola,
    Al igual que tú soy un forofo de la programación con PHP 5... y me gusta encontrar blogs como este.

    Ya tienes asegurada una visita más.
    ;-)

    Saludos,
    Esteban
    www.algoquehacer.net

    ResponderEliminar
  2. It’s the identical concept because the G01 command and it’s used when performing the appropriate machining process. In addition to the end point parameters, here we additionally have to define the middle of rotation, or the distance of the best toilet bowl tablets arc start point from the middle point of the arc. The start point is definitely the end point from the earlier command or the present point. The packages operating CNC machines are still conceived by humans; a poorly-written program will end in a poorly-made part.

    ResponderEliminar
  3. This is end result of|as a end result of} players who are superstitious and have been having a run of dangerous luck at one table will somewhat try their luck at a different table somewhat than hand over fully. BK8 is among the most influential Asian gaming organizations. This section contains games created by Microgaming, Playtech, and different companies. BK8 is a full fledged bitcoin stay on line casino, and digital currencies supply certain benefits. BK8 was established in 2014 and has turn out to be Asia’s most successful online gaming operator. In addition to providing alternatives for sports activities betting, BK8 우리카지노 provides its gamers with a comprehensive gaming platform.

    ResponderEliminar
  4. Dollar slots have greater payouts, but more danger and you may hit your loss limit quicker. Penny 카지노게임 slots won’t bankrupt you, but you won’t win huge, both. They don't mention the half they have played in actively hastening that course of via modifications in recreation technology and dynamics. But there's something to the argument that the machines are reflective of bigger societal developments. The games themselves had been present process an evolutionary change. Once upon a time, you stood at a slot machine, putting whatever change you had into it, cranking the lever and watching the wheels spin.

    ResponderEliminar