ADOdb MySQL Tutorial
ADOdb MySQL Tutorial
ADOdb MySQL Tutorial
PHP est especialmente diseado para la creacin de sitios webs dinmicos. Para crear estos sitios normalmente se utiliza algn tipo de base de datos desde donde obtenemos la informacin que queremos mostrar, ya sean noticias, preguntas y respuestas de un foro u otro tipo de informacin dinmica. Si usamos php normalmente usaremos MySQL como base de datos para iniciar nuestro sitio, el problema aparece cuando nuestro proyecto crece tanto que necesita hacer uso de otro tipo de base de datos ms robusta. Desafortunadamente el acceso en PHP cada base de datos es muy diferente. Para conectarnos a mysql, debemos usar mysql_connect(); cuando decida cambiar a Oracle o Microsoft SQL Server, debe usar ocilogon() o mssql_connect() respectivamente. Lo peor es que tambin los parmetros de cada funcin son diferentes. Una librera de abstraccin de los datos como ADODB es lo que Ud. necesita si desea asegurar en gran medida la portabilidad de su aplicacin. Provee una serie de funcinescomunes para comunicarse con las distintas bases de datos. ADODB viene de "Active Data ObjectsDataBase" (no muy original pero efectivo). ADODB actualmente soporta MySQL, PostgreSQL, Oracle, Interbase, Microsoft SQL Server, Access, FoxPro, Sybase, ODBC y ADO. Puede obtener ADODB en http://php.weblogs.com/adodb. Ejemplo MySQL La base de datos usada con ms frecuencia en PHP es MySQL, entonces es posible que le resulte familiar el siguiente cdigo. Conectamos al server MySQL en localhost, a la base de datos mydb, y ejecutamos una sentencia SQL. El resultado es impreso en pantalla, una lnea por cada fila obtenida. $db = mysql_connect("localhost", "root", "password"); mysql_select_db("mydb",$db); $result = mysql_query("SELECT * FROM employees",$db); if ($result === false) die("failed"); while ($fields = mysql_fetch_row($result)) { for ($i=0, $max=sizeof($fields); $i < $max; $i++) { print $fields[$i].' '; } print "<br>n"; } El cdigo superior est coloreado por seccin. La primer seccion es la conexin a la base de datos. La segunda seccin es la ejecucin de la sentencia SQL, y la ltima es la impresin del resultado. El loopwhile recorre todo las filas hasta el final. Aqusuequivalente en ADODB
include("adodb.inc.php"); $db = NewADOConnection('mysql'); $db->Connect("localhost", "root", "password", "mydb"); $result = $db->Execute("SELECT * FROM employees"); if ($result === false) die("failed"); while (!$result->EOF) { for ($i=0, $max=$result->FieldCount(); $i < $max; $i++) print $result->fields[$i].' '; $result->MoveNext(); print "<br>n"; } Ahora portarlo a Oracle es tan simple como cambiar la segunda linea a NewADOConnection('oracle'). Vamos a mirar cada parte del cdigo. Conectando a la base de datos include("adodb.inc.php"); $db = NewADOConnection('mysql'); $db->Connect("localhost", "root", "password", "mydb"); La conexin puede parecer algo ms complicada que en MySQL pero se explica en que ADODB es totalmente orientado a objectos. Si no est familiarizado con la programacin orientada a objetos no se preocupe porque todo queda oculto en la funcin NewADOConnection() . Para ahorrar memoria solo se carga las funcines especficas de la base de datos que vamos a utilizar. Cada driver tiene un archivo distinto que se carga mediante un include automticamente. Una vez cargado el driver que vamos a utilizar mediante la funcin NewADOConnection() nos conectamos a la base de datos usando $db->Connect(). Ejecutando SQL $result = $db->Execute("SELECT * FROM employees"); if ($result === false) die("failed"); Para enviar una sentencia sql al motor de base de datos se utiliza la funcin Execute(). Esta funcin devueve un objeto "recordset" si la ejecucin fue correcta o un "false" si huvoalgun error. Existen dos objetos principales en ADODB. El objeto connection y el objeto recordset. Cuando usar cada uno? El objeto connection ($db) es responsable de la conexin a la base de datos, formateo de las SQL y las consultas al servidor. El objeto recordset ($result) es responsable de la obtencin de los resultados y el formateo de los resultados. Obteniendodatos
while (!$result->EOF) { for ($i=0, $max=$result->FieldCount(); $i < $max; $i++) print $result->fields[$i].' '; $result->MoveNext(); print "<br>n"; } El proceso para obtener datos es como el proceso para leer desde un fichero. Para cada linea observamos si hemos llegado al final del fichero (EOF). Mientras no lleguemos al final del fichero seguimos leyendo y movindonos a la siguiente lnea (movenext). El array $result->fields[] es generaro por ADODB ante cada peticion de movenext(). Podemos obtener array asociativos o indexados por el nmero del campo. $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $rs1 = $db->Execute('select * from table'); $ADODB_FETCH_MODE = 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') Como se ve en el ejemplo, los dos recorsets usan diferentes mtodos para almacenar los datos recuperados de la consulta usando $ADODB_FETCH_MODE (el cambio de $ADODB_FETCH_MODE debe ser previo a Execute()).
ADOConnection
El objeto que realiza la conexin a la base de datos, ejecuta las sentencias SQL y tiene otro set de funcines para estandarizar el formato de sentencias SQL como la concatenacin de cadenas o formatos de fechas. Otras funcines especiales $recordset->Move($pos) mueve el recordset a una fila en particular. ADODB soporta avance de filas en todas las bases de datos. Algunas bases de datos no soportan retroceso en el recordset. Puede de todas maneras simular este comportamiento usando un cach. $recordset->RecordCount() retorna el total de filas obtenidas en el recordset. Algunas bases de datos no soportan esto y se devuelven un -1. $recordset->GetArray() coloca el resultado del recordset en un array. rs2html($recordset) esta funcin genera una tabla HTML con el resultado del recordset. include('adodb.inc.php'); include('tohtml.inc.php'); /* includes the rs2html function */ $conn = &ADONewConnection('mysql'); $conn->PConnect('localhost','userid','password','database');
$rs = $conn->Execute('select * from table'); rs2html($rs); /* recordset to html table */ Ms funcines tiles pueden ser encontradas en http://php.weblogs.com/adodb_manual
$f0->name contiene 'adata', $f0->type contiene 'date'. Cada base de datos define sus columnas de una manera particular, ADODB tiene una funcin especial para estandarizar los tipos de datos, MetaType($type, $max_length). C: character and varchar types X: text or long character (eg. more than 255 bytes wide). B: blob or binary image D: date T: timestamp L: logical (boolean) I: integer N: numeric (float, double, money) En el ejemplo de arriba. $recordset = $conn->Execute("select adate from table"); $f0 = $recordset->FetchField(0); $type = $recordset->MetaType($f0->type, $f0->max_length); print $type; /* debeimprimir 'D' porfecha*/
Cacheo de consultas
ADODB permite cachear los resultados de las consultas SQL en funcin de un tiempo definido. Las consultas deben entonces realizarse con connection>CacheExecute($secs2cache,$sql) y $connection>CacheSelectLimit($secs2cache,$sql,$nrows,$offset). n.trad. Los resultados se almacenan en un directorio que debe tener los permisos apropiados. Soporte de sesiones PHP4 ADODB soporta sesiones PHP. Puede guardar variables de sesiones en una base de datos para asegurar escalabilidad. Para ms informacin visite http://php.weblogs.com/adodb-sessions Si est pensando en escribir software comercial en PHP y desea distribuirlo, debe considerar ADODB. Est siendo usado con xito, es LGPL, que significa que puede ser distribuido con aplicaciones comerciales, dejando a su cdigo propietario.
Conclusin
ADODB es lo suficientemente robusto y completo para casi cualquier aplicacin. Est siendo actualizado permanentemente y tiene muchos seguidores por lo que es una muy buena opcin. traduccin al espaol por Horacio Degiorgi (codigophp.com)
http://www.codigophp.com/arts/adodb.html