PHP POO PDO CESAR BUSTAMANTE cbust@librosdigitales.net
Temas a desarrollar Definicion PDO Implementacion AJAX Implementacion Ejercicios
PDO Definicion PDO (PHP Data Objects) u Objetos de Datos de PHP. PDO es un driver de acceso a diferentes bases de datos. PDO esta compilado en C/C++, por los que ofrece mayor rapidez Viene incorporado en PHP5 y desde d PHP 5.1 viene enabled por df defecto. PDO está completamente orientado a objetos PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase PDO_FIREBIRD Firebird/Interbase 6 PDO_IBM IBM DB2 PDO_INFORMIX IBM Informix Dynamic Server PDO_MYSQL MySQL 3.x/4.x/5.x PDO_OCI Oracle Call Interface PDO_ODBC ODBC v3 (IBM DB2, unixodbc and win32 ODBC) PDO_PGSQL PostgreSQL PDO_SQLITE SQLite 3 and SQLite 2 PDO_4D 4D
PDO Activacion 1. Revisar php.ini, debe estar activo: extension=php_pdo.dll extension=php_pdo_mysql.dll 2. Sino aparece, buscar PDO: http://pecl.php.net/package search.php?pkg_name=pdo 3. Tambien puede ededescargarse arse todos los PDO desde http://snaps.php.net/win32/ descargar: php5.2 win32 latest.zip 4. Mas informacion en: http://pecl.php.net/package changelog.php?package=pdo Activar pdo en Linux: ===================== extension=pdo.so extension=pdo_mysql.so extension=pdo_sqlite.so
PDO Conexión a la BD Sin usar PDO: MySQL: PostgreSQL: $conexion = mysql_connect($host, $usr, $pwd); mysql_select_db($db, l $conexion); $conexion =pg_connect( host=$host dbname=$db user=$usr password=$pwd ); Con PDO. MySQL: $conexion = new PDO( mysql:host=$host; dbname=$db, $usr, $pwd); PostgreSQL: $conexion = new PDO( pgsql:host=$host; t dbname=$db, $usr, $pwd); Cambia solo el nombre del driver de la base de datos
PDO Implementacion Ejecutandouna una consulta SELECT con PDO. $conexion = new PDO( mysql:host=$host; dbname=$db, $usuario, $password); $sql = SELECT * FROM tabla ORDER by id ; $query = $conexion >query($sql); while( hl $row = $query >fetch(pdo::fetch_assoc) )){){ echo $row;
PDO Excepciones try { $db = new PDO('mysql:dbname=testdb;host=localhost', $user, $pass); $db >setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); // Cerramos la conexion $db = null; catch( PDOException $e ) { echo "Error de conexion: ". $e >getmessage(); Si se pasa como atributo PDO::ERRMODE_EXCEPTION lanzara una excepcion cuando ocurra un error.
PDO Consulta con parametros try { $db = new PDO('mysql:dbname=testdb;host=localhost', $user, $pass); $db >setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); // Preparamos la Consulta $comando = $db >prepare("select * FROM Clientes WHERE Cliente LIKE?"); // Obtenemos el comando desde GET $cliente = '%'. $_GET['Cliente']. '%'; $comando >execute( array( $cliente ) ); while( $row = $comando >fetch() ) { var_dump( $row ); // Imprimimos resultados // Cerramos la conexion $comando = null; $db = null; catch( PDOException $e ) { echo "Error de conexión: ". $e >getmessage(); Ejecutar comandos SQL, es mas sencillo, ya que automáticamente las variables son protegidas contra ataques de SQL Inyection. Aquí si cambia un poco la forma, ya que usamos lo que se le conoce como Prepared Statements o Comandos Preparados marcadores o "placeholders", esto es el signo de interrogación en el WHERE "?".?. Estos marcadores es lo que se va a reemplazar por el valor que se asigne al usar execute Como podemos ver, podemos usar directamente el valor de nuestro $_GET sin temor a que sea una cadena que pueda perjudicarnos, ya que el di driver automáticamente se encarga de analizar y enviar la cadena como un string.
PDO Otro ejemplo try { $db = new PDO('mysql:dbname=testdb;host=localhost', $user, $pass); $db >setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); // Preparamos el comando SQL $comando = $db >prepare("update Cliente SET mombre=? WHERE idcliente=?"); // Obtenemos datos desde GET $nom = '%'. $_GET[ nombre']. '%'; $id = '%'. $_GET[ idcliente']. '%'; marcadores $comando >execute( array( $nom,$id )); // Cerramos la conexion $comando = null; $db = null; catch( PDOException $e ) { echo "Error de conexión: ". $e >getmessage(); Transferimos los valores a los marcadores
PDO Otro forma try { $db = new PDO('mysql:dbname=testdb;host=localhost', $user, $pass); $db >setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); $nom = $_POST[ nombre']; $id = $_POST['id']; $actualiza = $db >prepare('update cliente SET nombre = :nom WHERE idcliente= :id'); $actualiza >bindparam(':nom', $nom); $actualiza >bindparam(':id', $id); $actualiza >execute(); marcadores // Cerramos la conexión $db = null; Transferimos los valores catch( PDOException $e ) { a los marcadores echo "Error de conexión: ". $e >getmessage();
Práctica