Inicio > PHP > Pdo

PDO

17/02/2017PHP

 

La extensión pdo es una capa de abastracción que permite conectar con diferentes bases de datos usando las mismas funciones facilitndo su portabilidad. Pero hay que tener cuidado ya que el sql de cada bases de datos puede variar.
Para cada base de datos existe un driver específico, que debe estar habilitado en el archivo de configuración php.ini.
Para conectarnos a nuestra base de datos se necesitan 5 datos:

  • Tipo de base de datos, como MySQL, Oracle, PostgreSQL, etc..
  • El servidor (host)
  • El nombre de la base de datos con la que nos vamos a conectar
  • El nombre de usuario
  • La contraseña
Ejemplo: $conn = new PDO('mysql:host=localhost;dbname=pruebas', 'root', ''); Donde tenemos el tipo de base de datos, el servidor, el nombre de la base de datos, el usuario y la contraseña. Si tenéis un proyecto con MySQL y por una razón u otra tenéis que cambiar a Oracle la conexión seria: $conn = new PDO('oracle:host=localhost;dbname=pruebas', 'root', '');
Las consultas se realizan de la siguiente manera:
$nombre = $_REQUEST["nombre"];
$apellidos = $_REQUEST["apellidos"];
$consulta = "SELECT COUNT(*) FROM $dbTabla
WHERE nombre=:nombre
AND apellidos=:apellidos";
$result = $conn->prepare($consulta);
$result->execute(array(":nombre" => $nombre, ":apellidos" => $apellidos));
cuando se usa la función prepare() se le denomina consultas preparadas y se hace para evitar la inyección de SQL.
Si no hace falta preparar la consulta basta con usar la función query:$conn->query($consulta);
Ahora os voy a comentar como se hace cuando se recuperan datos:
  • Cuando solo se devuelve un dato:$result = $conn->fetch(); Fetch permite varias opciones:
    • PDO::FETCH_ASSOC: devuelve un array indexado por los nombres de las columnas del conjunto de resultados.
    • PDO::FETCH_BOTH (predeterminado): devuelve un array indexado tanto por nombre de columna, como numéricamente con índice de base 0 tal como fue devuelto en el conjunto de resultados.
    • PDO::FETCH_BOUND: devuelve TRUE y asigna los valores de las columnas del conjunto de resultados a las variables de PHP a las que fueron vinculadas con el método PDOStatement::bindColumn().
    • DO::FETCH_CLASS: devuelve una nueva instancia de la clase solicitada, haciendo corresponder las columnas del conjunto de resultados con los nombres de las propiedades de la clase.
    • PDO::FETCH_INTO: actualiza una instancia existente de la clase solicitada, haciendo coincidir el nombre de las columnas con los nombres de las propiedades de la clase.
    • PDO::FETCH_LAZY: combina PDO::FETCH_BOTH y PDO::FETCH_OBJ, creando los nombres de la variables del objeto tal como se accedieron.
    • PDO::FETCH_NAMED: devuelve un array con la misma forma que PDO::FETCH_ASSOC, excepto que si hubiera múltiples columnas con el mismo nombre, el valor al que hace referencia dicha clave será un array con todos los valores de la fila de tuviera ese nombre de columna.
    • PDO::FETCH_NUM: devuelve un array indexado por el número de columna tal como fue devuelto en el conjunto de resultados, comenzando por la columna 0.
    • PDO::FETCH_OBJ: devuelve un objeto anónimo con nombres de propiedades que se corresponden a los nombres de las columnas devueltas en el conjunto de resultados.
  • Cuando se lanza una query con varios resultados se usa la función $result = $sth->fetchAll(); Fetch permite varias opciones:
    • PDO::FETCH_ASSOC: devuelve un array indexado por los nombres de las columnas del conjunto de resultados.
    • PDO::FETCH_COLUMN: Devuelve la columna con el índice indicado basado en 0.
    • PDO::FETCH_CLASS: Devuelve instancias de la clase especificada, haciendo corresponder las columnas de cada fila con las propiedades con nombre de la clase.
    • PDO::FETCH_FUNC: Devuelve el resultado de llamar a la función especificada, usando cada columna de fila como parámetro de la llamada.