2011-08-08 323 views
5

La gente sigue mencionando que debería usar PDO en mi PHP cuando trato con MySQL, nunca antes había escuchado sobre esto.¿Qué es PDO y por qué debería usarlo?

¿Qué es PDO? ¿Cómo se usa y cuáles son los pros y los contras?

Gracias,

+0

posible duplicado de [MySQL vs DOP] (http: // stackoverflow.com/questions/866860/mysql-vs-pdo) –

+0

Mira también MySQLi. Es una clase OOP para acceder a MySQL dentro de PHP. Es una especie de mezcla entre SQL sin procesar y PDO. –

+0

@T. Brian Jones, ¿estás hablando de la declaración preparada? –

Respuesta

0

http://php.net/manual/en/book.pdo.php

La extensión PHP Data Objects (PDO) define un peso ligero, interfaz consistente para acceder a bases de datos en PHP.

PDO proporciona una capa de abstracción de acceso a datos, lo que significa que, independientemente de la base de datos que esté utilizando, utiliza las mismas funciones para emitir consultas y obtener datos. PDO no proporciona una base de datos abstracción; no reescribe SQL ni emula características faltantes. Usted debe usar una capa de abstracción en toda regla si necesita esa instalación.

0

PDO es una clase orientada a objetos para componer y ejecutar consultas MySQL. Esto puede parecer una capa adicional de complejidad, pero PDO realmente le permite escribir consultas más simplemente en su php, y escribir consultas mediante programación (otro código construye las diferentes líneas de su consulta para usted).

PDO también se ocupa de una gran cantidad de problemas de seguridad, como el escape de sus consultas sql. Nunca hará ninguna de estas cosas si no utiliza una capa de abstracción de base de datos como PDO, e incluso si lo intenta, puede olvidarlo fácilmente o hacerlo incorrectamente.

Si no le preocupa la seguridad (cosas como SQL injection) y puede escribir las consultas MySQL naturales que necesita, entonces no tiene que preocuparse por ello. Aprenderlo puede facilitar las cosas en el futuro cuando trabajas en proyectos más estructurados que utilizan marcos.

14

Considere el PDO como una clase incorporada que viene empaquetada con PHP para facilitarle la interacción con su base de datos. mientras desarrollas una aplicación PHP necesitas cuidar muchas cosas como establecer una conexión, crear una consulta, buscar el recurso de conversión de resultados en una matriz, escapar de la inyección de MySQL usando mysql_real_escape_string() ahora que hay muchas cosas que cuidar, Al menos, pero no el último, considere una situación en la que desea pasar de mysql a mysqli o MSSQL para lo cual necesita pasar por todas y cada una de las funciones y cambiar cada línea de código para satisfacer la necesidad. PDO erradica todo este problema al proporcionar una clase centralizada.

Para más detalles, consulte el siguiente código.

para establecer una conexión a MySQL usando DOP:

$dbh = new PDO('mysql:host='.HOST.';dbname='.DATABASE,USERNAME,PASSWORD); 

eso es todo, se establece la conexión y se podía reutilizar $ dap para realizar consultas por ejemplo, para recoger el resultado de un usuario de la tabla sólo tiene dos línea de código.

$sth = $dbh->query('SELECT id,name,email FROM users'); 
$user = $sth->fetch(PDO::FETCH_ASSOC); 

Ahora $user tendrá todos los valores descabellada como una matriz asociativa.

Para insertar valor en la base de datos, debe hacer lo siguiente.

$sth = $dbh->prepare('INSERT INTO users(name,email) VALUES(:name, :email)'); 
$sth->bindParam(':name', 'My Name'); 
$sth->bindParam(':email', '[email protected]'); 
$sth->execute(); 

El código anterior está utilizando el nombre de marcador de posición, de esta manera DOP se mantendrá a salvo de muchas vulnerabilidades, ya que le mantendrá alejado de MySQL inyección. para que pueda empezar echar un vistazo a este tutorial por netttus, han explicado muy bien, este artículo se explicará todas sus dilemas con respecto DOP

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

+0

Ibrahim, ¿sabes lo que es $ sth? ¿Y para qué sirven los dos puntos? Ejemplo:: nombre,: emai. No entiendo este bindParam tampoco. ¡Gracias! –

+2

'$ sth' es una variable utilizada para referirse a' handle de declaración' para consultas PDO, ': name,: email' etc. son marcadores de posición, bindParam replace': name' con 'My name' en el ejemplo anterior. Debería leer el artículo mencionado anteriormente, el autor ha presentado algunos puntos muy buenos que lo ayudarán a comprender el concepto –

+0

Leo el artículo completo. Este PDO parece ser una práctica muy avanzada y segura, pero no entendí cómo los marcadores de posición protegen el MySQL y no se aplican a las inyecciones. Se ven como variables regulares? –

Cuestiones relacionadas