Download Acceso a bases de datos - Braulio J. Solano Rojas

Document related concepts
Transcript
Acceso a bases de datos
CI-2413 Desarrollo de aplicaciones
para Internet
Prof. Braulio José Solano Rojas
ECCI, UCR
Acceso a bases de datos
●
●
En aplicaciones web no podemos prescindir del
acceso a base de datos. La mayoría de las
aplicaciones utilizan algún tipo de repositorio.
En años recientes la tendencia ha sido a tener
capas de abstracción de base de datos. Esto
ha evolucionado a una automatización muy
completa con patrones como el
emparejamiento objeto-relacional.
2 de 29
Bases de datos en PHP
●
PHP permite el acceso directo a los siguientes
motores de bases de datos:
●
●
●
●
●
●
●
●
●
●
●
CUBRID
DB++
dBase
filePro
Firebird/InterBase
FrontBase
IBM DB2, Cloudscape y
Apache Derby
Informix
Ingres
MaxDB
●
●
●
●
●
●
●
●
●
●
●
Mongo
3 de 29
mSQL
Mssql
MySQL
OCI8
Paradox
PostgreSQL
SQLite
SQLite3
SQLSRV
Sybase
tokyo_tyrant
Bases de datos en PHP
●
También podemos encontrar acceso a otros
motores de bases de datos en PECL:
●
●
●
●
●
●
●
●
●
cassandra
couchbase
CUBRID
daffodildb
Dbase
DBDO
dbplus
dbx
drizzle
●
●
●
●
●
●
4 de 29
filepro
hwapi
ibm_db2
informix
Ingres
isis
Bases de datos en PHP
●
PHP permite el acceso a bases de datos
también de forma abstracta en lugar de forma
directa. Esto significa que, independientemente
de la base de datos que se esté utilizando, se
emplean las mismas funciones para realizar
consultas y obtener datos.
5 de 29
Bases de datos en PHP
●
PHP también tiene interfaces abstractas:
●
●
●
●
DBA (DataBase Abstraction)
DBX
ODBC
Recientemente también:
●
PHP Data Objects Interface que se está
convirtiendo en un estándar de facto para acceso a
bases de datos.
6 de 29
Bases de datos en PHP
●
Además podemos encontrar bibliotecas que
tienen una interfaz de abstracción OO de
bases de datos:
●
●
●
ADODB (http://adodb.sourceforge.net/)
PEAR (http://pear.php.net)
PHPlib (http://sourceforge.net/projects/phplib/)
7 de 29
Bases de datos en PHP: NoSQL
●
●
Las bases de datos de nueva generación
generalmente tratan algunos de los puntos: ser no
relacional, distribuidas, código abierto y
horizontalmente escalables.
La intención original ha sido bases de datos modernas
escalables en el web. El movimiento inició a inicios
del 2009 y ha crecido rápido. A menudo aplican otras
características como: libre de esquema, apoyo fácil de
replicación, API simple, eventualmente consistente /
BASE (no ACID), grandes cantidades de datos y más.
8 de 29
Bases de datos en PHP: NoSQL
●
http://nosql-database.org/
●
SQL vs NoSQL, which is better
9 de 29
Bases de datos en PHP: NoSQL
●
Es posible profundizar más sobre el tema en
los siguientes enlaces:
●
SQL vs. NoSQL: Which Is Better?
●
NOSQL Databases
10 de 29
Algunas extensiones populares
y de conexión directa
MySQL
●
MySQL es un sistema de bases de datos
desarrollado por la empresa MySQL AB. Tal
empresa desarrolla las nuevas versiones y
provee servicios como apoyo técnico. El
sistema de bases de datos se da bajo licencia
GPL que es una licencia de software libre o se
vende bajo una licencia comercial.
12 de 29
Funciones MySQL
●
Conexión al servidor:
●
int mysql_connect ( [string server [, string usuario
[, string password]]])
–
Ejemplo:
<?php
$link = mysql_connect ("titanic", "root", “ci2413")
or die ("Could not connect");
print ("Connected successfully");
mysql_close ($link);
?>
13 de 29
Funciones MySQL
●
Desconexión del servidor:
●
int mysql_close ( [int identificador_de_enlace])
–
Ejemplo:
Ver el ejemplo anterior…
14 de 29
Funciones MySQL
●
Selección de una base de datos:
●
int mysql_select_db ( string base_de_datos [, int
identificador_de_enlace])
–
Ejemplo:
…
$bd = mysql_select_db("contaduria");
…
15 de 29
Funciones MySQL
●
Envío de una consulta:
●
int mysql_query ( string sentencia [, int
identificador_de_enlace])
–
Ejemplo:
<?php
$result = mysql_query ("SELECT * WHERE 1=1")
or die (“¡Consulta inválida!");
?>
16 de 29
Funciones MySQL
●
Desplegando los resultados:
●
object mysql_fetch_object ( int id_resultado [, int
tipo_de_resultado])
–
Ejemplo:
<?php
mysql_connect($servidor,$usuario,$clave);
mysql_select_db("base");
$resultado = mysql_query("select * from tabla");
while($fila = mysql_fetch_object($resultado)) {
echo $fila->id_usuario;
echo $fila->nombre;
}
mysql_free_result($resultado);
?>
17 de 29
MySQLi
●
Funciona con PHP 4.1.3 y superior. Para tener la
funcionalidad se debe compilar PHP con apoyo para
la extensión mysqli.
18 de 29
MySQLi (Clases)
●
mysqli
●
–
Constructor
–
●
–
–
mysqli
–
Métodos
–
–
–
–
–
–
–
–
autocommit
change_user
character_set_name
close
commit
connect
debug
–
–
–
–
–
–
–
19 de 29
dump_debug_info
get_client_info
get_host_info
get_server_info
init
info
kill
multi_query
more_results
next_results
options
ping
MySQLi (Clases)
–
–
–
–
–
–
–
–
–
–
–
–
prepare
query
real_connect
escape_string
rollback
select_db
ssl_set
stat
stmt_init
store_results
use_results
thread_safe
●
Propiedades
–
–
–
–
–
–
–
–
–
–
–
–
–
20 de 29
affected_rows
client_info
client_version
errno
error
field_count
host_info
info
insert_id
protocol_version
sql_state
thread_id
warning_count
MySQLi (Clases)
●
mysqli_stmt
●
–
–
Métodos
–
–
–
–
–
–
–
–
–
–
●
bind_param
bind_result
close
data_seek
execute
fetch
free_result
result_metadata
prepare
send_long_data
Propiedades
–
–
–
–
21 de 29
reset
store_results
affected_rows
errno
param_count
sqlstate
MySQLi (Clases)
●
mysqli_result
●
●
–
Métodos
–
–
–
–
–
–
–
–
–
–
Propiedades
–
close
data_seek
fetch_fields
fetch_field_direct
fetch_array
fetch_assoc
fetch_object
fetch_row
close
field_seek
–
–
22 de 29
current_field
field_count
lengths
num_rows
PostgreSQL
●
La base de datos PostgreSQL es un producto de Código
Abierto. Postgres, desarrollada originalmente en el
Departamento de Ciencias de la Computación de la
Universidad de Berkeley, fue pionera de muchos de los
conceptos objeto-relacionales ahora disponibles en
algunas bases de datos comerciales. Provee apoyo a
SQL92/SQL99, transacciones, integridad referencial,
procedimientos almacenados y extendibilidad de tipo.
PostgreSQL es un descendiente de código abierto del
código original de Berkeley.
23 de 29
Un ejemplo: MongoDB
●
MongoDB es una base de datos no relacional,
escalable, de alto rendimiento y de código
abierto.
●
●
●
●
●
●
●
●
Almacenamiento basado en documentos
Apoya indización
Replicación y alta disponibilidad
Auto-sharding
Consulta
Actualizaciones rápidas atómicas
Map/Reduce
GridFS
24 de 29
Uso de extensiones directas
¡Problemas!
●
El uso de extensiones de conexión directa
mezclando código SQL con PHP, como en los
ejemplos MySQL, nos enfrenta a los
siguientes problemas:
●
●
●
Escalabilidad
Mantenimiento
Portabilidad
25 de 29
Uso de extensiones directas.
Solución
●
La solución para resolver los problemas anteriores,
es separar nuestro diseño en capas:
●
●
●
●
Abstracción de Base de Datos (si es posible con
emparejamiento objeto-relacional y caché en memoria
principal de consultas)
Lógica PHP
Despliegue (en formato HTML)
Varias herramientas permiten hacer esta separación,
por ejemplo: bibliotecas de abstracción de bases de
datos y plantillas. Además la utilización de
programación orientada a objetos y patrones nos
hará la vida fácil.
26 de 29
El patrón ActiveRecord y
emparejamiento objeto relacional
●
●
No son lo mismo, sin embargo, el patrón
ActiveRecord es una forma de emparejamiento
objeto relacional.
La interfaz de un objeto que siga el patrón
mencionado incluiría funciones tales como
Insertar, Actualizar y Borrar, además de
propiedades que corresponden más o menos a
las columnas de la tabla que representa el
objeto.
27 de 29
El patrón ActiveRecord y
emparejamiento objeto relacional
●
Algunos ejemplos del patrón:
●
●
●
●
●
●
●
●
●
●
ADOdb Active Record
Axon ORM
Doctrine ORM
Eloquent ORM
Flourish
Idiorm
NotORM
Propel
RedBeanPHP
Spot2 ORM
28 de 29
¡Gracias por su atención!
¿Preguntas?