Manual de ADODB

July 22, 2016 | Author: Jorge Iván Franco Arias | Category: N/A
Share Embed Donate


Short Description

Download Manual de ADODB...

Description

Manual de ADODB

1 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

Pagina principal ADODB en español

Libreria ADOdb para PHP V4.92 29 Ago 2006 (c) 2000-2006 John Lim (jlim#natsoft.com) Este programa tiene licencia dual BSD-Style y LGPL. Esto significa que lo puedes usar tanto en productos comerciales como en propietarios.

Ligas utules de ADOdb: Descarga Otros manuales (en ingles) Otros manuales (en español Introduccion Caracteristicas Unicas Como se esta usando actualmente ADOdb Solicitud de mejoras y reporte de fallas Instalacion Instalacion Minima Codigo de Inicio y Ejemplos de conexion Soporte a DSN (Data Source Name) Ejemplos de conexion

ADOdb de alta velocidad - trucos de optimizacion Modificando y extendiendo ADOdb con seguridad Caracteristicas para PHP5 foreach iterators exceptions

Base de datos soportadas Tutoriales Ejemplo 1: Select Ejemplo 2: Select avanzado Ejemplo 3: Insert Ejemplo 4: Depurando Ejemplo rs2html Ejemplo 5: MySQL y Menus Ejemplo 6: Conectarase a multiples bases de datos al mismo tiempo Ejemplo 7: Generando enunciados SQL de Update e Insert Ejemplo 8: Implementando cursores con Siguiente y Anterior Ejemplo 9: Exportando a formatos delimitados por Tabulador o comas Ejemplo 10: Filtros a la medida Ejemplo 11: Transacciones inteligentes Usando manejadores de errores a la medida o de PEAR Nombres de DSN Memoria intermedia (Caching) Tablas Pivote REFERENCIA Variables: $ADODB_COUNTRECS $ADODB_ANSI_PADDING_OFF $ADODB_CACHE_DIR $ADODB_FORCE_TYPE $ADODB_FETCH_MODE $ADODB_LANG Constantes: ADODB_ASSOC_CASE ADOConnection Conecciones: Connect PConnect NConnect IsConnected Ejecutando SQL: Execute CacheExecute SelectLimit CacheSelectLimit Param Prepare PrepareSP InParameter OutParameter AutoExecute GetOne CacheGetOne GetRow CacheGetRow GetAll CacheGetAll GetCol CacheGetCol GetAssoc CacheGetAssoc Replace ExecuteCursor (oci8 unicamente) Generando enunciados SQL: GetUpdateSQL GetInsertSQL Concat IfNull length random substr qstr Param OffsetDate SQLDate DBDate DBTimeStamp BindDate BindTimeStamp Blobs: UpdateBlob UpdateClob UpdateBlobFile BlobEncode BlobDecode Paginacion/Desplazamiento: PageExecute CachePageExecute Limpieza: CacheFlush Close Transacciones: StartTrans CompleteTrans FailTrans HasFailedTrans BeginTrans CommitTrans RollbackTransSetTransactionMode Recuperando Datos: SetFetchMode Cadenas: concat length qstr quote substr Fechas: DBDate DBTimeStamp UnixDate UnixTimeStamp OffsetDate SQLDate Renglones: Affected_Rows Insert_ID RowLock GenID CreateSequence DropSequence Manejo de Errores: ErrorMsg ErrorNo MetaError MetaErrorMsg IgnoreErrors Diccionario de datos (metadata): MetaDatabases MetaTables MetaColumns MetaColumnNames MetaPrimaryKeys MetaForeignKeys ServerInfo Estadisticas y modifacion de SQL: LogSQL fnExecute and fnCacheExecute Descontinuado: Bind BlankRecordSet Parameter

ADORecordSet

07/10/2011 7:27

Manual de ADODB

2 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

Regresa un campo: Fields Regresa un renglon:FetchRow FetchInto FetchObject FetchNextObject FetchObj FetchNextObj GetRowAssoc Regresa todos los renglones:GetArray GetRows GetAssoc Desplazamiento:Move MoveNext MoveFirst MoveLast AbsolutePosition CurrentRow AtFirstPage AtLastPage AbsolutePage Generacion de Menu:GetMenu GetMenu2 Fechas:UserDate UserTimeStamp UnixDate UnixTimeStamp Informacion del Recordset:RecordCount PO_RecordSet NextRecordSet Informacion de un campo:FieldCount FetchField MetaType Limpieza: Close rs2html ejemplo

Diferencias entre ADOdb y ADO Guia para manejadores de base de datos Bitacora de cambios

Introduccion Las funciones de acceso a base de datos en PHP no estan estandarizadas. Esto requiere una libreria que esconda las diferencias entre cada API de base de datos (encapsular las diferencias) para que podamos cambiar facilmente de base de datos. Se requiere la version de PHP 4.0.5 o posterior (debido a que usamos la funcion str_replace con arreglos). Actualmente manejamos MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, SQLite, Interbase (versiones de Firebird y Borland), Foxpro, Access, ADO, DB2, SAP DB and ODBC. Tenemos noticias que se puede conectar a Progress y CacheLite via ODBC. Esperamos que mas personas contribuyan con drivers para manejar mas base de datos. PHP4 maneja variables de sesion. Puedes almacenar la informacion de tu sesion usando ADOdb para tener una verdadera portabilidad y escalabilidad. Para mas informacion ve el archivo adodb-session.php. Tambie lee tips_portable_sql-es.htm (tambien dispobible en ingles en el archivo tips_portable_sql.htm) para consejos para escribir enunciados SQL portables.

Caracteristicas especiales de ADOdb Facil para programadores Windows debido a que muchas de las convenciones son similares al ADO de Microsoft. A diferencia de otras clases PHP de base de datos que se enfocas unicamente en el enunciado SELECT. ADOdb soporta codigo para manajar INSERT y UPDATE que son rapidamente adaptables a multiples bases de datos. Tambien hay metodos para manejo de fechas, concatenacion de cadenas y encomillado de cadenas para diferentes bases de datos. Tiene un systema de metatipos (metatype) para poder determinar cuales tipos como CHAR, TEXT and STRING son equivalentes en diferentes bases de datos. Es facil de portar debido a que todo el codigo que depende de la base de datos esta en funciones. Tu no tienes que portar la logica principal de las clases. Creacion de tablas e indices portable con las clases de diccionario de datos datadict. Monitor de rendimiento de base de datos y ajuste de enunciados SQL con la clase de performance monitoring. Sesiones en base de datos con la clase session management. Maneja notificacion por sesion vencida. Mapeo a Objectos Relacionales uando la clase ADOdb_Active_Record.

Como se esta usando ADOdb Aqui hay algunos ejemplos de personas que usan ADOdb (para una lista mas larga, visita http://adodb.sourceforge.net/): PhpLens es un componente comercial de cudricula de datos que permite tanto a programadores expertos como a inexpertos desarrollar y mantener bases de datos en la Web facilmente. Desarrollado por el autor de ADOdb. PHAkt: PHP Extension for DreamWeaver Ultradev permite hacer programas PHP en el popular editor de paginas Web. El manejo de la base de datos es con ADOdb. Analysis Console for Intrusion Databases (ACID): Motor de analisis para buscar y procesar una base de datos de incidentes de seguridad generada por otros programas como IDSes y firewalls (e.g. Snort, ipchains). Por Roman Danyliw.

07/10/2011 7:27

Manual de ADODB

3 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

PostNuke es una sistema de control de contenidos muy popular. Maneja un soporte completo de CSS, cumple con HTML 4.01, un sistema avanzado de bloques, y es completamente multilenguaje. EasyPublish CMS es otro sistema de control de contenidos. Para el manejo de informacion y modulos integrados para tu internet, intranet y extranet. Noruego. NOLA es una apliacion completa de contabilidad, inventarios y control de trabajo. Su licencia es GPL, desarrollado por Noguska.

Solicitud de mejoras y reporte de fallas Las solicitudes de mejoras o reporte de fallas pueden ser enviadas por correo electronico a jlim#natsoft.com.my o publicadas en el foro de ayuda de ADOdb en http://phplens.com/lens/lensforum/topics.php?id=4.

Guia de Instalacion Asegurate de estar usando PHP 4.0.5 o posterior. Descomprime todos los archivos en un directorio accesible por tu servidor Web. Para probar, intenta modificar algunos de los ejemplos del tutorial. Asegurate de corregir los parametros de coneccion a tus necesidades. Puedes depurar el codigo usando $db->debug = true como se muestra a continuacion:

Instalacion Minima Para los desarrolladores que quieran distribuir una version minima de ADOdb, se requieren los siguientes archivos: adodb.inc.php adodb-lib.inc.php adodb-time.inc.php drivers/adodb-$database.inc.php license.txt (por razones legales) adodb-php4.inc.php adodb-iterator.inc.php (funcionaldiad para PHP5) Opcionalmente: adodb-error.inc.php y lang/adodb-$lang.inc.php (si usas MetaError()) adodb-csvlib.inc.php (si usas recordsets en memoria - CacheExecute(), etc) adodb-exceptions.inc.php y adodb-errorhandler.inc.php (si usas el manejo de errores de ADOdb o excepciones de PHP5). adodb-active-record.inc.php si usas Active Records.

Ejemplos de Codigo de Inicio Al ejecutar ADOdb, al menos se cargan dos archivos. Primero adodb/adodb.inc.php, que contienen todas las funciones usadas por todas las clases de bases de datos. El codigo especifico a una base de datos en particular esta en el archivo adodb/driver/adodb-????.inc.php. Por ejemplo, para conectarse a una base de datos mysql: include('adodb/adodb.inc.php'); $conn = &ADONewConnection('mysql');

07/10/2011 7:27

Manual de ADODB

4 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

Cada vez que necesitas conectarte a una base de datos, debes de crear un objeto de conexion usando la funcion ADONewConnection($driver). NewADOConnection($driver) es un nombre alterno para la misma funcion. En este momento, no estas conectado a la base de datos (ya no es cierto si como parametro usas un dsn). Primero tienes que decidir si vas a usar una coneccion persistente o no persistente. La ventaja de las conexiones persistentes es que son mas rapidas, debido a que la conexion no es cerrada nunca (aun si usas Close()). Las conexiones No persistentes consumen menos recursos reduciendo el riesgo de sobrecargar la base de datos o el servidor Web. Para conexiones persistentes, usa $conn->PConnect(), o $conn->Connect() para conexiones no persistentes. Algunas bases de datos tambien manejan NConnect(), la cual forza la creacion de una nueva conexion. Problemas con Conexiones: Si creas dos conexiones, pero ambas usan el mismo usuario y contraseña, PHP compartira las conexiones. Esto puede causar problemas si se supone que las conexiones son a diferentes bases de datos. La solucion es usar siempre diferentes usuarios para diferentes bases de datos o usar NConnect().

Soporte a Data Source Name (DSN) Desde la version 4.51 de ADOdb, te puedes conectar a la base de datos pasando como argumento a NewADOConnection() (o ADONewConnection, que es la misma funcion) un dsn. El formato del dsn es: $driver://$username:$password@hostname/$database?options[=value]

NewADOConnection() llama a Connect() o PConnect() internamente por ti. Si la conexion falla, te regresa false. # Conexion no persistente $dsn = 'mysql://root:pwd@localhost/mydb'; $db = NewADOConnection($dsn); if (!$db) die("Conexion incorrecta"); # no se requiere llamar connect/pconnect! $arr = $db->GetArray("select * from table"); # conexion persistente $dsn2 = 'mysql://root:pwd@localhost/mydb?persist';

Si tienes caracteres especiales como /:?_ en tu dsn, entonces tienes que invocar a rawurlencode primero: $pwd = rawurlencode($pwd); $dsn = "mysql://root:$pwd@localhost/mydb"; $dsn2=rawurlencode("sybase_ase")."://user:pass@host/path?query";

Las opciones permitidas son: Para todas los drivers Interbase/Firebird M'soft ADO MySQL

'persist', 'persistent', 'debug', 'fetchmode', 'new' 'dialect','charset','buffers','role' 'charpage' 'clientflags'

MySQLi Oci8

'port', 'socket', 'clientflags' 'nls_date_format','charset'

Para todos los drivers, cuando se activa la opcion persist o persistent, se forza una conexionpersistente; asi mismo, cuando se activa new, entonces la conexion se creara usando NConnect si el driver lo maneja. La opcion debug habilita la depuracion. La opcion fetchmode invoca SetFetchMode(). Si no se le indica el valor a alguna oopcion se asume el valor de 1. La version DSN de ADOdb DSN es compatible con el formato de la version 1.0 de PEAR DB.

Ejemplos de Conexion a Bases de Datos MySQL y la mayoria de bases de datos Las conexiones a MySQL son muy sencillas, y los parametros son identicos a mysql_connect:

07/10/2011 7:27

Manual de ADODB

5 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

$conn = &ADONewConnection('mysql'); $conn->PConnect('localhost','usuario','contraseña','database'); # o dsn $dsn = 'mysql://user:pwd@localhost/mydb'; $conn = ADONewConnection($dsn); # no necesita Connect() # o dsn persistente $dsn = 'mysql://user:pwd@localhost/mydb?persist'; $conn = ADONewConnection($dsn); # no necesita PConnect() # un ejemplo mas complejo: $pwd = urlencode($pwd); $flags = MYSQL_CLIENT_COMPRESS; $dsn = "mysql://user:$pwd@localhost/mydb?persist&clientflags=$flags"; $conn = ADONewConnection($dsn); # no need for PConnect()

La mayoria de las demas bases de datos usan la misma convencion: Connect($servidor, $usuario, $contraseña, $database). Las excepciones se enlistas a continuacion. PDO PDO, que solo funciona en PHP5, acepta una cadena de driver especifica: $conn =& NewADConnection('pdo'); $conn->Connect('mysql:host=localhost',$user,$pwd,$mydb); $conn->Connect('mysql:host=localhost;dbname=mydb',$user,$pwd); $conn->Connect("mysql:host=localhost;dbname=mydb;username=$user;password=$pwd");

El mecanismo via DSN tambien funciona: $conn =& NewADConnection("pdo_mysql://user:pwd@localhost/mydb?persist"); # persist es opcional

PostgreSQL PostgreSQL 7 y 8 acepta conexiones usando: a. La cadena estandard de conexcion: $conn = &ADONewConnection('postgres'); $conn->PConnect('host=localhost port=5432 dbname=maria');

b. Los 4 parametros clasicos: $conn->PConnect('localhost','usuario','contraseña','database');

c. dsn: $dsn = 'postgres://user:pwd@localhost/mydb?persist'; # persist es opcional $conn = ADONewConnection($dsn); # no se requiere Connect/PConnect

LDAP Este es un ejemplo de busqueda en un servidor LDAP. Gracias a Josh Eldridge por el driver y este ejemplo:

Using DSN: $dsn = "ldap://ldap.baylor.edu/ou=People,o=Baylor University,c=US"; $db = NewADOConnection($dsn);

Interbase/Firebird Hay que definir la base de datos en el parametro $host: $conn = &ADONewConnection('ibase'); $conn->PConnect('localhost:c:\ibase\employee.gdb','sysdba','masterkey');

O con dsn: $dsn = 'firebird://user:pwd@localhost/mydb?persist&dialect=3'; # persist es opcional $conn = ADONewConnection($dsn); # no se requiere Connect/PConnect

SQLite Sqlite creara la base de datos si no existe. $conn = &ADONewConnection('sqlite'); $conn->PConnect('c:\path\to\sqlite.db'); # sqlite la creara si no existe

O con dsn: $path = urlencode('c:\path\to\sqlite.db'); $dsn = "sqlite://$path/?persist"; # persist es opcional $conn = ADONewConnection($dsn); # no se requiere Connect/PConnect

Oracle (oci8) Con oci8 te puedes conectar de varias maneras. a. PHP y Oracle estan en la misma maquina, usar SID.

07/10/2011 7:27

Manual de ADODB

7 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

$conn->Connect(false, 'scott', 'tiger');

b. Nombre TNS definido en tnsnames.ora (o ONAMES o HOSTNAMES), ej. 'miTNS' $conn->PConnect(false, 'scott', 'tiger', 'miTNS');

o $conn->PConnect('miTNS', 'scott', 'tiger');

c. Direccion del servidor y SID $conn->connectSID = true; $conn->Connect('192.168.0.1', 'scott', 'tiger', 'SID');

d. Direccion del servidor y nombre del servicio $conn->Connect('192.168.0.1', 'scott', 'tiger', 'servicename');

e. Cadena de conexion de Oracle: $cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$host)(PORT=$port))(CONNECT_DATA=(SID=$sid)))"; $conn->Connect($cstr, 'scott', 'tiger');

f. ADOdb dsn: $dsn = 'oci8://user:pwd@tnsname/?persist'; # persist is optional $conn = ADONewConnection($dsn); # no need for Connect/PConnect $dsn = 'oci8://user:pwd@host/sid'; $conn = ADONewConnection($dsn); $dsn = 'oci8://user:pwd@/'; # oracle on local machine $conn = ADONewConnection($dsn);

Tamnbien puedes usar el charSet para Oracle 9.2 y posterior, soportado desde PHP 4.3.2, ADOdb 4.54: $conn->charSet = 'we8iso8859p1'; $conn->Connect(...); # o $dsn = 'oci8://user:pwd@tnsname/?charset=WE8MSWIN1252'; $db = ADONewConnection($dsn);

DSN-less ODBC (ejemplos con access and mssql) Las conexiones DSN via ODBC pueden ser creadas en el panel de control de ODBC, o puedes usar una conexion DSN-less. Para usar una conexion DSN-less se necesita PHP version 4.3 o posterior. Para Microsoft Access: $db =& ADONewConnection('access'); $dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=d:\\northwind.mdb;Uid=Admin;Pwd=;"; $db->Connect($dsn);

Para Microsoft SQL Server: $db =& ADONewConnection('odbc_mssql'); $dsn = "Driver={SQL Server};Server=localhost;Database=northwind;"; $db->Connect($dsn,'userid','password');

o si lo prefieres, se puede usar la extension mssql (que esta limitada a la funcionalildad de la version 6.5):

07/10/2011 7:27

Manual de ADODB

8 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

$db =& ADONewConnection('mssql'); $db->Execute('localhost', 'userid', 'password', 'northwind');

Para DB2: $dbms = 'db2'; # or 'odbc_db2' if db2 extension not available $db =& ADONewConnection($dbms); $dsn = "driver={IBM db2 odbc DRIVER};Database=sample;hostname=localhost;port=50000;protocol=TCPIP;". "uid=root; pwd=secret"; $db->Connect($dsn);

Conexiones DSN-less con ADO Si estas usando una version de PHP anterior a 4.3.0, Las conexiones DSN-less solo trabajaran con el ADO de Microsoft, el cual esta basada en las APIs COM de Microsoft. Un ejemplo de uso de la libreria ADOdb y el ADO de Microsoft:

ADOdb de alta velocidad - trucos de optimizacion La libreria ADOdb es una clase grande, aun asi regularmente derrota a las 'otras' clases PHP en rendimiento. Esto es por su diseño en forma de capas, como una cebolla, con las funciones mas rapidas en la capa mas profunda. Usa principalmente estas funciones para el mejor rendimiento: Capa mas profunda Connect, PConnect, NConnect Execute, CacheExecute SelectLimit, CacheSelectLimit MoveNext, Close qstr, Affected_Rows, Insert_ID La manera mas rapida de acceder a los campos es usando el arreglo array $recordset->fields. Tambien hay que asignar la variable global $ADODB_FETCH_MODE = ADODB_FETCH_NUM, y (para oci8, ibase/firebird y odbc) $ADODB_COUNTRECS = false antes de conectarse a la base de datos. Esto al momento (Dec 2003). Considera usar parametros posisicionales (bind) si tu base de datos los soporta, ya que mejora la reutilizacion de los planes de ejecucion. Usa el sistema de 'performance tuning de ADodb para identificar rapidamente los cuellos de botella. Finalmente asegurate de que tienes un acelerador de PHP instalado como APC, Turck MMCache, Zend Accelerator o ionCube. Algunos ejemplos: Recuperacion de datos mas rapida usando PHP Recuperacion de datos mas rapida usando la extension ADOdb $rs =& $rs->Execute($sql); while (!$rs->EOF) { var_dump($rs->fields); $rs->MoveNext(); }

$rs =& $rs->Execute($sql); $array = adodb_getall($rs); var_dump($array);

Sugerencias Avanzadas Si tienes instalada la extension C ADOdb, puedes modificar tus llamados a $rs->MoveNext() por adodb_movenext($rs). Esto duplica la velocidad de esta operacion. Para obtener todo un conjunto de rsultados en una operacion, usa

07/10/2011 7:27

Manual de ADODB

9 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

GetArray(), el cual usa internamente la funcion de alta velocidad de la extension adodb_getall($rs). Execute() es la manera usal para ejecutar enunciados SQL. Puedes usar la funcion de bajo nivel _Execute() y _query() para reducir el costo. Ambas funciones comparten los mismos parametros que Execute(). Si no tienes ningun parametro posicional o si tu base de datos soporta los parametros posicionales (sin emulacion), entonces puedes llamar _Execute() directamente. AL invocar esta funcion eliminas la emulacion de parametros. La depuracion tambien es manejada por _Execute(). Si no requuieres depuracion ni emulacion de parametros, no requieres obtener un recordset, entonces puedes llamar _query. Es muy buena para inserts, updates y deletes. Al invocar esta funcion omites la emulacion de parametros, la depuracion y el majejo de recordsets. _query() regresa el resultid, true o false. Recomendacion para INFORMIX: Desabilita los cursores navegables 'scroll' con $db->cursorType = 0.

Modfificando ADOdb con seguridad Tu puedes modificar ADOdb para tus propios usos. Por suerte puedes mantener la compatibilidad extendiendo las clases de ADodb y por medio de la variable $ADODB_NEWCONNECTION. $ADODB_NEWCONNECTION nos permite modificar el comportamiento de ADONewConnection(). ADOConnection() verifica esta variable e invocara la funcion cuyo nombre tenga la variable. En el siguiente ejemplo, se le agrega mas funcionabilidad al objeto de conexion por medio de las clases hack_mysql y hack_postgres7. La convencion en el nombre de las clases recordset se controla por medio de la propiedad $rsPrefix. En este caso se le asigna el valor de 'hack_rs_', lo que proboca que ADOdb use hack_rs_mysql y hack_rs_postgres7 como los nombres de las clases recordset. En caso de que se requiera usar los drivers normales de ADODB hay que regresar el valor 'false' en la funcion. class hack_mysql extends adodb_mysql { var $rsPrefix = 'hack_rs_'; /* aqui van las modificaciones */ } class hack_rs_mysql extends ADORecordSet_mysql { /* aqui van las modificaciones */ } class hack_postgres7 extends adodb_postgres7 { var $rsPrefix = 'hack_rs_'; /* aqui van las modificaciones */ } class hack_rs_postgres7 extends ADORecordSet_postgres7 { /* aqui van las modificaciones */ } $ADODB_NEWCONNECTION = 'hack_factory'; function& hack_factory($driver) { if ($driver !== 'mysql' && $driver !== 'postgres7') return false; $driver = 'hack_'.$driver; $obj = new $driver(); return $obj; } include_once('adodb.inc.php');

No olvides invocar el constructor de la clase padre.

Caracteristicas para PHP5 A partir de la version 4.02 ADOdb determina automaticamente que version de PHP estas usando. Si detecta la version PHP5, activa automaticamente las siguientes caracteriticas: PDO: estan disponibles los drivers de PDO. Ve los ejemplos de conexion. Actualemte los drivers PDO no son tan poderosos como los drivers nativos, y deben de ser tomados como experimentales.

07/10/2011 7:27

Manual de ADODB

10 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

Foreach iterators: Es una forma muy clara de procesar un 'recordset': $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $rs = $db->Execute($sql); foreach($rs as $k => $row) { echo "r1=".$row[0]." r2=".$row[1].""; }

Exceptions: Unicamente hay que incluir adodb-exceptions.inc.php y ya se pueden atrapar las excepciones conforme ocurran los errores. include("../adodb-exceptions.inc.php"); include("../adodb.inc.php"); try { $db = NewADOConnection("oci8"); $db->Connect('','scott','bad-password'); } catch (exception $e) { var_dump($e); }

Nota: Alcanzar el fin de archivo (EOF) NO es considerado ni un error ni una excepcion.

Bases de Datos soportadas La columna nombre es el valor que se le pasa a NewADOConnection($nombre) para crear el objecto de conexion para esa base de datos. Nombre

Verificada Base de datos

sirve RecordCount()

Pre-requisitos Sistemas operativos

access

B

Microsoft Access/Jet. Hay que crear el DSN en el ODBC.

S/N

ODBC

ado

B

ADO generico, no esta optimizado para ninguna base de ? depende de la ADO o proveedor Windows datos especifica. Permite conexiones DSN-less. Para un base de datos OLEDB unicamente mejor rendimiento, utilizar un proveedor de OLEDB. Esta la clase basa para todos los drivers ado.

ado_access

B

Microsoft Access/Jet usando ADO. Permite conexiones DSN-less. Para mejor rendimiento usar un proveedor OLEDB.

S/N

ADO o proveedor Windows OLEDB unicamente

ado_mssql

B

Microsoft SQL Server usando ADO. Permite conexiones S/N DSN-less. Para mejor rendimiento usar un proveedor OLEDB.

ADO o proveedor Windows OLEDB unicamente

db2

A

DB2. Debe de funcionar satisfactoriamente porque se base en el driver ODBC based on ODBC.

S/N

Interfase CLI/ODBC de DB2

Unix y Windows. Trucos de instalacion en Unix. Hay reportes de que los parametros $host y $database del Connect() tienen que ir invertidos si se usa la interfase CLI.

odbc_db2

C

Se conecta a DB2 usando la extesion ODBC generica.

S/N

Interfase CLI/ODBC de DB2

Unix y Windows. sugerencias para instalacion en Unix. Tengo reportes que los parametros $host y $database tienen que ser invertidos en el Connect() cuando se usa la interfase CLI.

vfp

A

Microsoft Visual FoxPro. Hay que crear un DSN.

S/N

ODBC

Windows unicamente

fbsql

C

FrontBase.

S

?

Unix y Windows

Windows unicamente

Hay que configurar $db->codePage antes de conextarse.

07/10/2011 7:27

Manual de ADODB

11 de 69

ibase

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

B

Interbase 6 o anterior. Algunos usuarios dicen que puedes necesitar esta sintaxis para conectarte $db->PConnect('localhost:c:/ibase/employee.gdb', "sysdba", "masterkey") . Actualmente le falta Affected_Rows.

S/N

cliente Interbase

Unix y Windows

version Firebird de interbase.

S/N

cliente Interbase

Unix y Windows

version Borland de Interbase 6.5 o posterior. Desafortunadamente las version son diferentess.

S/N

cliente Interbase

Unix y Windows

Cliente Informix

Unix y Windows

Antes de conectarte puedes modificarle $db->dialect, $db->buffers y $db->charSet. firebird

C

borland_ibase C informix72

C

Versiones Informix anteriores a 7.3 que no soportan SELECT FIRST.

S/N

informix

C

Driver generico para informix.

S/N

ldap

C

Driver LDAP driver. Ver el ejemplo para informacion de uso.

mssql

A

Microsoft SQL Server 7 y posterior. Tanbien funciona con Microsoft SQL Server 2000. Toma en cuenta que el formato de las fechas es problematico con este driver. Por ejemplo, la extension mssql de PHP no regresa los segundos de los campos datetime!

mssqlpo

Cliente Informix

Unix y Windows

Extension LDAP

?

S/N

cliente Mssql

Unix y Windows. Guia de instalacion de Unix y otra mas.

A

Driver portable de mssql. Es identico al driver de mssqk S/N anteriorm excepto que el operador de concatenacion '||' se convirtio a '+'. Esto es util para migrar codigo desde otras versiones de SQL.

Cliente Mssql

Unix y Windows. Guia de instlacion en Unix.

mysql

A

MySQL sin manejo de transacciones. Puedes usar $db->clientFlags antes de conectarte.

S/N

Cliente MySQL

Unix y Windows

mysqlt or maxsql

A

MySQL con soporte de transacciones. Recomendamos S/N usar || como el operador de concatenacion para una mejor portabilidad. Esto se logra ejectuando MySQL con: mysqld --ansi o mysqld --sqlmode=PIPES_AS_CONCAT

Cliente MySQL

Unix y Windows

oci8

A

Oracle 8/9. Tiene mas funcionabilidad que el driver oracle (ej. Affected_Rows). Puedes tener que hacer un putenv('ORACLE_HOME=...') antes del Connect/PConnect.

S/N

Cliente Oracle

Unix y Windows

hay dos maneras de conectarse - Con la direccion IP del servidor y el nombre del servicio: PConnect('serverip:1521','scott','tiger','service') o en base a un renglon en TNSNAMES.ORA o ONAMES o HOSTNAMES: PConnect(false, 'scott', 'tiger', $oraname). A partir de la version 2.31, se manejan las variables de cursores REF directamente (ver ExecuteCursor). oci805

C

Maneja un funcionaldiad reducida para la version 8.0.5 de Oracle. SelectLimit no es tan eficiente como en los drivers oci8 o oci8po.

S/N

Cliente Oracle

Unix y Windows

oci8po

A

Driver portable de Oracle 8/9. Esta es casi identica al S/N driver oci8 execpto que (a) Las variables 'bind' en los Prepare() usan ? en lugar de :bindvar, (b) los nombres de campos estan en minusculas (la manera mas usual en PHP).

Cliente Oracle

Unix y Windows

Usa este driver si la portabilidad de tu codigo a otras bases de datos es importante. En caso contrario usa el driver oci8 ya que da mejor rendimiento. odbc

A

Driver generico para ODBC, no esta optimizado para ? depende de la ODBC ninguna base de datos especifica. Para conectarse usa base de datos PConnect('DSN','user','pwd'). Esta es la clase base para todos los drivers basados en ODBC .

Unix y Windows. Trucos para Unix.

odbc_mssql

C

Usa ODBC para conectarse a MSSQL

S/N

ODBC

Unix y Windows.

odbc_oracle

C

Usa ODBC para conectarse a Oracle

S/N

ODBC

Unix y Windows.

odbtp

C

Driver odbtp generico. Odbtp es un programa para poder S/N usar los DSN en el ODBC de Windows desde OTROS sistemas operativos (ej. Linux).

odbtp

Unix y Windows

Odtbp con soporte unicode

odbtp

Unix y Windows

odbtp_unicode C

S/N

07/10/2011 7:27

Manual de ADODB

12 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

oracle

C

Implementa el viejo API de Oracle 7. Si te es posible usa el driver oci8 para un mejor rendimiento.

S/N

Cliente Oracle

Unix y Windows

netezza

C

Driver para Netezza. Netezza esta basado en el codigo base de postgres.

Y

?

?

postgres

A

Driver generico PostgreSQL. Actualmente es identico al S driver postgres7.

Cliente PostgreSQL

Unix y Windows.

postgres64

A

Para PostgreSQL 6.4 y anteriores que no manejan LIMIT S internamente.

Cliente PostgreSQL

Unix y Windows.

postgres7

A

PostgreSQL que soporta LIMIT y caracteristicas de la version 7.

S

Cliente PostgreSQL

Unix y Windows.

postgres8

A

PostgreSQL que maneja la funcionalidad de la version 8. S

Cliente PostgreSQL

Unix y Windows.

sapdb

C

SAP DB. Debe de funcionar bien ya que esta basado en el driver ODBC.

S/N

Cliente ODBC de ? SAPdb

sqlanywhere

C

Sybase SQL Anywhere. Debe de funcionar bien ya que esta basado en el driver ODBC.

S/N

Cliente ODBC de ? SQL Anywhere ODBC

sqlite

B

SQLite. Unicamente verificada en PHP5.

S

-

Unix y Windows.

sqlitepo

B

Driver portable para SQLLite. Es debido a que el modo asociativo no funciona como en los otros drivers. Al seleccionar multiples tablas (joining), se incluye el nombre de la tabla en la llave del arreglo asociativo.

S

-

Unix y Windows.

En el driver "sqlitepo", el nombre de la tabla es eliminado del nombre de la columna. Cuando hay conflictos, el primer campo tiene preferencia. sybase

C

Sybase.

S/N

Cliente Sybase

Unix y Windows.

sybase_ase

C

Sybase ASE.

S/N

Cliente Sybase

Unix y Windows.

La columna "Verificada" indica que tan profusamente el codigo a sido verificado y usado. A = bien verificado y usado con mucha gente B = verificado y usable, pero algunas caracteristicas pueden no estar implementadas C = driver proporcionado por los usuarios o experimental. Puede no manejar todas las ultimas caracteristcicas de ADOdb. La columna "sirve RecordCount()" indica si RecordCount() regresa la cantidad de renglones o regresa -1 cuando se ejectuta un enunciado SELECT. Si la columna muestra S/N entonces RecordCount() es simulado cuando la variable global $ADODB_COUNTRECS=true (esto es el valor por omision). Nota que para recordsets muy grandes, puede ser mejor desabilitar la emulacion de RecordCount()debido a la gran cantidad de memoria para leer el recordset para contarlo. Tambien hay una penalizacion del 40-50% si se tiene que emular la funcion. Es emulada en la mayoria de las bases de datos excepto para PostgreSQL y MySQL. Esta variable es verificada cada vez que se ejecuta un SELECT, por lo que puedes escoger selectivamente cuales recordset contar.

Tutoriales Ejemplo 1: SELECT Tarea: Conectarse al DSN MS Access de la base de datos Nortwind, mostrar las primeras 2 columnas de cada renglon. En este ejemplo, se crea un objeto ADOConnection que representa la conexion a la base de datos. La conexion se inicia con PConnect, que es una conexion persistente. Para interrogar a las base de datos llamamos a la funcion ADOConnection.Execute() . Esto regresa un objeto ADORecordSet que es de hecho un cursor que contiene el renglon actual en el arreglo fields[]. Tambien usamos el metodo MoveNext() para avanzar de renglon en renglon. Nota: Una funcion muy util que NO usamos en este ejemplo es SelectLimit, que nos permite limitar la cantidad de renglones a mostrar.

La variable $recordSet obtenida contiene el renglon actual en el arreglo $recordSet->fields , indexado por numero de columna (empezando en cero). Usamos el metodo MoveNext() para avanxar al renglon siguiente. La propiedad EOF tiene valor verdadero (true) cuando se llega al final del archivo. Si hay algun error en el Execute() se regresa falso (false) en lugar del recordset. El arreglo $recordSet->fields[] es generado por la extension PHP de la base de datos correspondiente. Algunas extensiones unicamente indexan por numero y no por nombre del campo. Para provocar que se indexe por nombre (o sea con arreglos asociativos) hay que usar la funcion SetFetchMode. Cada recordset almacena y usa el metodo que estuvo vigente cuando se creo el recordset con un Execute() o SelectLimit(). $db->SetFetchMode(ADODB_FETCH_NUM); $rs1 = $db->Execute('select * from table'); $db->SetFetchMode(ADODB_FETCH_ASSOC); $rs2 = $db->Execute('select * from table'); print_r($rs1->fields); # muestra array([0]=>'v0',[1] =>'v1') print_r($rs2->fields); # muestra array(['col1']=>'v0',['col2'] =>'v1')

Para obtener el numero de renglones en el enunciado SELECT, se puede usar la funcion $recordSet->RecordCount(). Observa que la funcion puede regresar -1 si no se puede determinar la cantidad de renglones.

Ejemplo 2: SELECT Avanzado con objetos de campos Seleccionar los registros de una tabla, desplegar las primeras dos columnas. Si la segunda columna es un campo DATE o TIMESTAMP entonces reformatear la fecha al formato americano.

En este ejemplo se verifica el tipo de campo de la segunda columna usando la funcion FetchField(). Esto obtiene un objeto con al menos tres propiedades. name: Nombre de la columna (campo) type: Tipo nativo del campo de la columna max_length: Longitid maxima del campo. Algunas bases de datos como MySQL no regresan la longitud maxima

07/10/2011 7:27

Manual de ADODB

14 de 69

http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#rsclose

del campo adecuadamente. En estos casos max_length contendra -1. Posteriormente usamos MetaType() para traducir el tipo nativo a un tipo generico. Actualmente estan definidos los siguientes tipos genericos: C: Campo caracter que se debe de mostrar en etiquetas . X: TeXtos, campos de texto largo (indefinido) que se deben de mostrar en B: Blobs, u Objectos Binarios Largos (BYTE). Normalmente son imagenes. D: Campo fecha T: Campo Timestamp o datetime L: Campo logico (boleano o de bit) I: Campo entero N: Campo numerico. Incluye auto incrementales (seriales), numericos, punto flotante, reales y enteros. R: Campo serial. Incluye serial, enteros auto incrementales integers. Funciona solo para algunas bases de datos. Si el metatype es de tipo date o timestamp, entonces se imprime usando la funcion definida por el usuario UserDate(), la cual convierte la cadena de texto en formato PHP SQL al formato definido por el usuario. otro uso para la funcion MetaType() es para validar los datos antes de ejecutar un enunciado SQL de INSERT o UPDATE.

Ejemplo 3: Insert Insertar un renglon en la tabla Orders conteniendo fechas y cadenas de caracteres que necesitan ser encomillados antes de que sean aceptados por la base de datos, por ejemplo el apostrofo en la palabra John's.
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF