Programacion Web Avanzada

July 22, 2016 | Author: Ricardo Vazquez Pavon | Category: N/A
Share Embed Donate


Short Description

programacion...

Description

TECNOLOGICO NACIONAL DE MEXICO CAMPUS TUXTEPEC

ASIGNATURA: Programación web avanzada

CARRERA: Ingeniería en Informática

SEMESTRE: 10to.

GRUPO: A

CATEDRATICO: M.S.C. Víctor Manuel Evaristo Salinas UNIDAD: IIII PRESENTA: Ricardo Vázquez Pavón

Mayo del 2015, San Juan Bautista Tuxtepec, Oaxaca

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 adodbsession.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. 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');

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 'persist', 'persistent', 'debug', 'fetchmode', 'new' Interbase/Firebird

'dialect','charset','buffers','role'

M'soft ADO

'charpage'

MySQL

'clientflags'

MySQLi

'port', 'socket', 'clientflags'

Oci8

'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: $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. $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): $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 =& $rs->Execute($sql); $array = adodb_getall($rs);

$rs->MoveNext();

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 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.

      

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

Verificad Base de datos a

sirve RecordCount ()

PreSistemas requisito operativo s s

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 datos especifica. Permite conexiones DSN-less. Para un mejor rendimiento, utilizar un proveedor de OLEDB. Esta la clase basa para todos los drivers ado.

? depende de la base de datos

ADO o Windows proveedor unicamente OLEDB

Windows unicamente

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

B

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

ADO o Windows proveedor unicamente OLEDB

ado_mssql

B

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

ADO o Windows proveedor unicamente OLEDB

db2

A

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

S/N

Interfase CLI/ODB C 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.

vfp

A

fbsql ibase

S/N

Interfase CLI/ODB C 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.

Microsoft Visual FoxPro. Hay que crear un S/N DSN.

ODBC

Windows unicamente

C

FrontBase.

?

Unix y Windows

B

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

cliente Interbase

Unix y Windows

S

Antes de conectarte puedes modificarle $db->dialect, $db->buffers y $db->charSet. version Firebird de interbase.

S/N

cliente Interbase

Unix y Windows

borland_ibas C e

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

S/N

cliente Interbase

Unix y Windows

informix72

C

Versiones Informix anteriores a 7.3 que no soportan SELECT FIRST.

S/N

Cliente Informix

Unix y Windows

informix

C

Driver generico para informix.

S/N

Cliente Informix

Unix y Windows

ldap

C

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

Extension LDAP

?

firebird

C

mssql

A

Microsoft SQL Server 7 y posterior. S/N 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!

cliente Mssql

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

mssqlpo

A

Driver portable de mssql. Es identico al S/N driver de mssqk 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. S/N Recomendamos 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','serv ice') 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 S/N identica al 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 ? depende de optimizado para ninguna base de datos la base de especifica. Para conectarse usa datos PConnect('DSN','user','pwd'). Esta es la clase base para todos los drivers basados en ODBC .

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 usar los DSN en el ODBC de Windows desde OTROS sistemas operativos (ej. Linux).

S/N

odbtp

Unix y Windows

Odtbp con soporte unicode

S/N

odbtp

Unix y Windows

odbtp_unico C de 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 driver postgres7.

S

Cliente Unix y PostgreSQ Windows. L

postgres64

A

Para PostgreSQL 6.4 y anteriores que no manejan LIMIT internamente.

S

Cliente Unix y PostgreSQ Windows. L

postgres7

A

PostgreSQL que soporta LIMIT y caracteristicas de la version 7.

S

Cliente Unix y PostgreSQ Windows. L

postgres8

A

PostgreSQL que maneja la funcionalidad de S la version 8.

Cliente Unix y PostgreSQ Windows. L

sapdb

C

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

Cliente ODBC de SAPdb

sqlanywhere C

sqlite

B

S/N

?

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

Cliente ? ODBC de SQL Anywhere ODBC

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 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