PDO (objeto de datos PHP) es algo nuevo en PHP 5. Cuando PHP 6 está a punto de ser lanzado, PHP 6 solo usa PDO para procesar la base de datos de forma predeterminada y moverá todas las extensiones de la base de datos a PECL, por lo que el valor predeterminado ya no existe. php_mysql.dll y similares, ¿qué debo hacer? Solo podemos seguir el ritmo, así que probé PDO. (Este artículo es solo de nivel básico, los expertos pueden omitirlo, jaja)
[¿Qué es PDO?]
PDO es una nueva característica importante agregada a PHP 5, porque antes de PHP 5, php4/php3 tenía un montón de extensiones de bases de datos para comunicarse entre sí. Conexión y procesamiento de bases de datos, php_mysql.dll, php_pgsql.dll, php_mssql.dll, php_sqlite.dll y otras extensiones para conectar MySQL, PostgreSQL, MS SQL Server, SQLite, de manera similar, debemos usar ADOdb, PEAR::DB, PHPlib: :Las clases abstractas de bases de datos como DB son extremadamente engorrosas e ineficientes para ayudarnos. Después de todo, ¿cómo puede la eficiencia del código PHP ser tan alta que podamos escribirlo directamente en C/C++? Por lo tanto, la aparición de la PDO es inevitable. Todo el mundo debería aceptar su uso con una actitud de aprendizaje tranquila. Tal vez descubra que puede ahorrarle mucho esfuerzo.
[Instalación de PDO]
Estoy ejecutando Windows XP SP2, por lo que todo el proceso se lleva a cabo en Windows/FreeBSD y otras plataformas, busque la información y configure la instalación usted mismo.
El mío es PHP 5.1.4, que ya viene con la extensión php_pdo.dll, pero requiere un poco de configuración antes de poder usarlo.
Abra c:windowsphp.ini, que es mi archivo de configuración PHP, y busque la siguiente línea:
extension_dir
Este es el directorio donde existe nuestra extensión Mi extensión PHP 5: C:php5ext, luego lo haré. Cambie esta línea a:
extension_dir = "C:/php5/ext"
y luego búsquela en php.ini:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Extensiones dinámicas;
;;;;;;;;;;;;;;;;;;;;;;;;
Hay un montón de cosas similares a ;extension=php_mbstring.dll a continuación. agréguelo al final. Nuestra extensión PDO:
extensión=php_pdo.dll.
extensión=php_pdo_mysql.dll
extensión=php_pdo_pgsql.dll
extensión=php_pdo_sqlite.dll
extensión=php_pdo_mssql.dll
extensión=php_pdo_odbc.dll
extensión=php_pdo_firebird.dll
;extensión=php_pdo_oci8.dll
Se pueden agregar varios controladores PDO, pero el siguiente php_pdo_oci8.dll, debido a que no instalé la base de datos de Oralce, no lo tiene, así que uso un punto y coma para comentarlo. Luego reinicie nuestro servidor web, IIS/Apache, el mío es IIS, oye, me miras con desprecio, en Windows, es fácil.
Después de reiniciar, escriba un archivo phpinfo.php en el directorio de documentos de nuestro servidor web y agregue estos:
<?
phpinfo();
?>
Luego abre nuestro encantador navegador: IE/FireFox, el mío es FireFox 2.0, lo acabo de descargar, es genial, no le tengo miedo al software malicioso, jaja.
Ingrese en el navegador: http://localhost/phpinfo.php . Si su ruta a esta página no es consistente, ingrésela usted mismo.
En el contenido de salida, si puede verlo correctamente:
PDO
Soporte PDO habilitado
Controladores PDO mysql, pgsql, sqlite, mssql, odbc, firebird
Hay varias instrucciones del controlador en la parte posterior: PDO_Firebird, pdo_mssql, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite.
Entonces, felicidades por su instalación exitosa; de lo contrario, verifique cuidadosamente los pasos anteriores. .
[Prueba rápida]
Estoy usando MySQL 4.0.26, pero personalmente recomiendo a todos que usen MySQL 4.1.x o MySQL 5.0.x, porque esas versiones tienen muchas cosas interesantes que vale la pena aprender. A lo que nuestro PDO necesita conectarse es a mi MySQL 4.0. Si no ha instalado MySQL, instálelo usted mismo. Hemos establecido MySQL y agregado la tabla foo a la biblioteca de prueba, que incluye cuatro campos como identificación, nombre, sexo y hora.
Comenzamos a construir la primera aplicación PDO y creamos un archivo pdo.php en el directorio de documentos web:
<?php
$dsn = "mysql:host=localhost;dbname=prueba";
$db = nuevo PDO($dsn, 'raíz', '');
$count = $db->exec("INSERT INTO foo SET nombre = 'heiyeluren',gender='male',time=NOW()");
eco $cuenta;
$db = nulo;
?>
No entiendo lo que significa, expliquemoslo lentamente. Esta línea:
$dsn = "mysql:host=localhost;dbname=test";
es para construir nuestro DSN (fuente de datos). Mire la información que contiene: el tipo de base de datos es mysql, la dirección del host es localhost y el nombre de la base de datos. es una prueba. Sólo unos pocos datos. Los métodos de construcción de fuentes de datos de diferentes bases de datos son diferentes.
$db = new PDO($dsn, 'root', '');
Inicializar un objeto PDO El primer parámetro del constructor es nuestra fuente de datos, el segundo es el usuario que se conecta al servidor de la base de datos y el tercer parámetro es la contraseña. . No podemos garantizar que la conexión sea exitosa. Hablaremos de excepciones más adelante. Aquí asumimos que la conexión fue exitosa.
$count = $db->exec("INSERT INTO foo SET nombre = 'heiyeluren',gender='male',time=NOW()");
echo $count;
llama a nuestro objeto PDO conectado exitosamente para ejecutar una consulta. Esta consulta es una operación para insertar un registro. El uso del método PDO::exec() devolverá un resultado que afecta el registro. Finalmente, aún necesita finalizar el recurso del objeto:
$db = null;
De forma predeterminada, esta no es una conexión larga. Si necesita una conexión larga a la base de datos, debe agregar un último parámetro: array(PDO::ATTR_PERSISTENT. => verdadero). Se vuelve así:
$db = new PDO( $dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true))
; del anterior, pero es algo similar a ADOdb.
[Continuar aprendiendo]
Si queremos extraer datos, debemos usar la función de adquisición de datos. ($db usado a continuación son todos los objetos conectados arriba)
<?php
foreach($db->query("SELECCIONAR * DE foo")){
print_r($fila);
}
?>
También podemos utilizar este método de adquisición:
<?php
$rs = $db->query("SELECT * FROM foo");
while($fila = $rs->fetch()){
print_r($fila);
}
?>
Si desea obtener todos los datos en la matriz a la vez, puede hacer esto:
<?php
$rs = $db->query("SELECT * FROM foo");
$result_arr = $rs->fetchAll();
print_r($resultado_arr);
?>
Matriz
([0] => Matriz(
[identificación] => 1
[0] => 1
[nombre] => heiyeluren
[1] =>heiyeluren
[género] =>Hombre[2] =>Hombre[hora] =>2006-10-28 23:14:23
[3] => 2006-10-28 23:14:23
)
}
Veamos los registros internos. Hay índices digitales e índices asociados, lo cual es un desperdicio de recursos. Solo necesitamos el índice asociado:
<?php.
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$rs = $db->query("SELECT * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($resultado_arr);
?>
Mire el código anterior, el método setAttribute() es establecer algunos atributos. Los atributos principales son: PDO::ATTR_CASE, PDO::ATTR_ERRMODE, etc. Lo que debemos configurar aquí es PDO::ATTR_CASE, es decir. , utilizamos el índice asociado para obtener datos. Al configurar, hay varias opciones para determinar si el índice asociado está en mayúsculas o minúsculas:
PDO::CASE_LOWER - Forzar que el nombre de la columna esté en minúsculas PDO::CASE_NATURAL - El nombre de la columna será en la forma original PDO::CASE_UPPER - Forzar que el nombre de la columna esté en mayúsculas
Usamos el método setFetchMode para establecer el tipo de valor de retorno para obtener el conjunto de resultados. Los mismos tipos son:
PDO::FETCH_ASSOC - forma de matriz asociativa PDO.
::FETCH_NUM - forma de matriz de índicenumérico
PDO::FETCH_BOTH - ambas formas de matriz Sí, este es el PDO::FETCH_OBJ predeterminado - en forma de objeto, similar al anterior mysql_fetch_object().
use PDO::FETCH_ASSOC Qué usar específicamente depende de sus propias necesidades Otras adquisiciones Escriba el manual de referencia.
Además del método anterior para obtener datos, también existe este método:
<?php
$rs = $db->prepare("SELECT * FROM foo");
$rs->ejecutar();
while($fila = $rs->fetch()){
print_r($fila);
}
?>
En realidad, es casi lo mismo. Si desea obtener los resultados de un campo en un registro específico, puede usar PDOStatement::fetchColumn():
<?php
$rs = $db->query("SELECT COUNT(*) FROM foo");
$col = $rs->fetchColumn();
eco $col;
?>
Generalmente, fetchColumn() se utiliza para realizar estadísticas de recuento o algunos registros que solo requieren un campo son fáciles de operar.
Para resumir brevemente las operaciones anteriores:
las operaciones de consulta son principalmente PDO::query(), PDO::exec() y PDO::prepare(). PDO::query() se usa principalmente para operaciones que devuelven resultados registrados, especialmente operaciones SELECT. PDO::exec() se usa principalmente para operaciones que no devuelven un conjunto de resultados, como INSERT, UPDATE, DELETE y otras operaciones. Devuelve El resultado es el número de columnas afectadas por la operación actual. PDO::prepare() es principalmente una operación de preprocesamiento. Debe usar $rs->execute() para ejecutar la instrucción SQL en el preprocesamiento. Este método puede vincular parámetros y es relativamente poderoso. No se puede explicar simplemente en este artículo. Todos pueden consultar manuales y otra documentación. Las principales operaciones para obtener el conjunto de resultados son: PDOStatement::fetchColumn(), PDOStatement::fetch(), PDOStatement::fetchALL(). PDOStatement::fetchColumn() es un campo del primer registro especificado en el resultado de la recuperación. El valor predeterminado es el primer campo. PDOStatement::fetch() se usa para obtener un registro y PDOStatement::fetchAll() se usa para obtener todos los conjuntos de registros en uno. Para obtener los resultados, puede establecer el tipo del conjunto de resultados requerido a través de PDOStatement::setFetchMode. .
También hay dos operaciones circundantes, una es PDO::lastInsertId() y PDOStatement::rowCount(). PDO::lastInsertId() devuelve la última operación de inserción y el tipo de columna de clave principal es el último ID de incremento automático. PDOStatement::rowCount() se utiliza principalmente para el conjunto de resultados afectados por las operaciones DELETE, INSERT y UPDATE de PDO::query() y PDO::prepare(), y no es válido para el método PDO::exec() y operaciones SELECCIONAR.
[Manejo de errores]
¿Qué debe hacer si encuentra un error en el programa? Aquí describimos la información de error y el manejo de excepciones de la clase PDO.
1. Enfoque orientado a objetos,
primero veamos cómo lidiar con errores de conexión, etc., y usemos el enfoque orientado a objetos para manejarlo:
<?php.
intentar {
$db = nuevo PDO('mysql:host=localhost;dbname=test', $usuario, $contraseña);
$db = nulo;
} captura (PDOException $e) {
imprimir "Error: " $e->getMessage() "<br/>";
morir();
}
?>
Aquí utilizamos la función de manejo de excepciones orientada a objetos de PHP 5. Si hay una excepción, la inicializaremos llamando a PDOException para inicializar una clase de excepción.
Estructura de atributos de la clase de excepción PDOException:
<?php
clase PDOException extiende la excepción
{
public $errorInfo = null // Para obtener información sobre el error, puede llamar a PDO::errorInfo() o PDOStatement::errorInfo() para acceder al $message protegido // Para obtener información sobre la excepción, puede probar Exception::getMessage(); acceso protegido $code // código de error de estado SQL, al que se puede acceder usando Exception::getCode()
}
?>
Esta clase de manejo de excepciones está integrada con la clase de manejo de excepciones incorporada de PHP 5. Echemos un vistazo breve a la estructura de la clase de manejo de excepciones incorporada de PHP 5:
<?php
excepción de clase
{
//Propiedad protected $message = 'Excepción desconocida'; //Mensaje de excepción protected $code = 0; //Código de excepción definido por el usuario protected $file //El nombre del archivo donde ocurrió la excepción protected $line; donde ocurrió la excepción Número de línea
// Método función final getMessage() // Devuelve información de excepción función final getCode() // Devuelve código de excepción función final getFile() // Devuelve el nombre del archivo donde ocurrió la excepción función final getLine; (); // Devuelve el número de línea de código donde ocurrió la excepción final function getTrace(); // matriz backtrace() función final getTraceAsString() // información getTrace() formateada en una cadena
}
?>
En consecuencia, getFile() y getLine() se pueden llamar apropiadamente en el código para localizar errores y hacer que la depuración sea más conveniente.
2. Utilice el enfoque orientado a procesos
para mirar el código primero:
<?
$db = nuevo PDO('mysql:host=localhost;dbname=test', $usuario, $contraseña);
$rs = $db->query("SELECCIONAR aa,bb,cc FROM foo");
si ($db->códigoerror() != '00000'){
print_r($db->errorInfo());
salida;
}
$arr = $rs->fetchAll();
print_r($arr);
$db = nulo;
?>
Los objetos PDO y PDOStatement tienen métodos errorCode() y errorInfo(). Si no hay errores, errorCode() devuelve: 00000; de lo contrario, se devolverán algunos códigos de error. errorInfo() devuelve una matriz, incluidos los códigos de error definidos por códigos de error de PHP y MySQL e información de error. La estructura de la matriz es la siguiente:
Matriz.
(
[0] => 42S22
[1] => 1054
[2] => Columna desconocida 'aaa' en la 'lista de campos'
)
Después de ejecutar cada consulta, el resultado de errorCode() es el más reciente, por lo que podemos controlar fácilmente la visualización del mensaje de error nosotros mismos.
[Resumen simple]
Del uso anterior, podemos ver que PDO es realmente poderoso. También hay algunas otras cosas que no he mencionado, como parámetros vinculantes, preprocesamiento, procedimientos almacenados, procesamiento de transacciones y otras funciones. Además, existen diferentes estructuras DSN de expansión de datos. La propia base de datos Oracle tiene muchas cosas especiales que requieren un estudio y comprensión en profundidad. Este artículo solo describe brevemente algunos conocimientos introductorios, que pueden considerarse como una comprensión simple de PDO.