Conexión PHP y MySQL
Desde PHP es posible invocar funciones y ejecutar
sentenciasde específicas de MySQL. La interconexión entre ambos programas se realiza mediante una de estas instrucciones:
$res=mysql_db_query (base, sent, $enl)
Envia una sentencia MySQL al servidor que selecciona la base de datos
base y ejecuta la sentencia (
sent sobre ella y devuelve un
identificador de resultado positivo o falso si se produce algún tipo de error.
El
identificador de enlace (
$enl) es opcional (sería el valor devuelto por la función
mysql_connect ejecutada previamente.
Si se omitiera
$enl la función
mysql_db_query intentaría buscar un
enlace abierto y si no lo hubiera ejecutaría automaticamente un
mysql_connect() en el que
host sería el valor
localhost,
usuario root y
password una cadena vacia.
¡¡Cuidado...!!
Si has puesto una
password al usuario
root o si estás escribiendo tu código para un
servidor remoto deberás cerciorarte de abrir un conexión antes de ejecutar esta instrucción. De lo contrario -como es evidente- daría
error ya que los parámetros de la
conexión automática no coincidirían con la configuración del servidor.
$res=mysql_list_dbs ($enl)Devuelve un
identificador de resultado que contiene las bases disponibles en el servidor con el que está establecida la conexión.
mysql_select_db (base, $enl)
Selecciona un
base de datos MySQL (
base) y la
asocia con el
identificador de enlace especificado(
enl). Si no se especifica un identificador de enlace, se comportará -en esa circunstancia- de igual forma que la sentencia anterior.
mysql_query (sent, $enl)
Envia una sentencia
sent a
la base activa asociada al
identificador de enlace $enl.
Si no es especificado un
identificador de enlace, asumirá el último enlace abierto.
Devuelve TRUE si la sentencia se ha ejecutado correctamente y FALSE en caso contrario.
¡¡Cuidado...!!
La ejecución de esta instrucción requiere que
previamente se haya asociado un base de datos al
identificador de enlace mediante una instrucción
mysql_select_db.
mysql_fetch_row ($res)
Seleciona una fila de datos del resultado asociado al
identificador de resultado $res.
Cada fila -puede contener varias- es devuelta como una matriz escalar cuyo primer índice es
cero.
Devolverá FALSE cuando ya
no queden más filas.
Obviamente, previo a esta instrucción es necesario haber ejecutado un
mysql_db_query que habrá sido la función generadora del
identificador de resultado.
mysql_num_rows ($res)
Esta función devuelve el número de filas que contiene el
identificador de resultado.
mysql_fetch_array ($res)
Es una versión extendida de
mysql_fetch_row. Además de guardar los datos en el
indice numerico del
array, los guarda también con
indices asociativos, usando el
nombre del campo como
clave.
Crear una base de datos utilizando MySQL
En la página anterior hemos visto como la instrucción
mysql_create_db de PHP nos permitía crear una
base de datos.
Las sentencias MySQL que permiteN crear una base de datos son estas:
| CREATE DATABASE IF NOT EXISTS nombre | | CREATE DATABASE nombre |
La segunda devolvería un
error en el caso de que intentáramos crear una base de datos ya existente mientras que la primera omitiría ese error.
Ninguna de ellas
sobreescribiría una base de datos preexistente
Borrar una base de datos utilizando MySQL
También existen sentencias MySQL alternativa al
mysql_drop_db de PHP. Son estas:
| DROP DATABASE IF EXISTS nombre | | DROP DATABASE nombre |
Manejando identificadores de resultados
Ya sabes aquello de
cree el ladrón... que todos son de su condición. Algo similar me ocurre a mí. Como lo mío han sido
sangre, sudor y lágrimas... para aclararme de lo que son y significan los
identificadores de resultado y diferenciar los conceptos
mysql_fetch_row y
mysql_fetch_array ... intenté tratar de explicarlo claro aquí al margen... pero como
Salamanca no presta... a quien Dios no da creo que lo de la
claridad no ha sido precisamente un éxito, así que he tratado de hacer un ejemplo y ponertelo aquí.
Si ejecutas el
script (ya sabes que para que puedas ejecutarlo he tenido que cambiar los valores del
localhost por los de
freesurf)
no te asustes... la lista que aparece es inmensa ya que nos aparecerá
toda la lista de bases de datos del servidor... y claro... son un montón.
Crear una TABLA utilizando MySQL
En el caso de creación de TABLAS no tenemos otra opción que utilizar las sentencias MySQL. Son estas:
| CREATE TABLE IF NOT EXISTS (nombre_campo1 parametros_campo1, nombre_campo2 parametros_campo2,... nombre) | | CREATE TABLE (nombre_campo1 parametros_campo1, nombre_campo2 parametros_campo2,... nombre) |
La única diferencia entre ambas opciones es la conocida comprobación/no comprobación de la preexistencia y el devolver/no devolver error en tal caso.
Veamos ahora lo que significan los parámetros.
nombre_campoxx es eso... el
nombre que quieres asignar a ese campo y para el que normalmente
los expertos suelen utilizar algo que aluda al contenido tal como:
fec_nac,
nom_perro y
lindezas similares...
Por si tienes la tentación de poner nombres que
coincidan con
palabras reservadas mi consejo es que
huyas de la tentación igual que hacen los perros cuando truena, pero si tu
testarudez desborda mi consejo, entonces... entonces... aparte de decirte aquello de
... mira que te he advertido.. te diré que las escribas entre ` `. Fíjate bien que no son comillas tradicionales, que son
acentos graves.
Si sigues mi consejo de
no utilizar palabras reservadas una segunda advertencia:
los nombres de campo no se escriben entre comillas.
Vamos ahora con los
parametros_campoxx. Por cada campo que crees tienes que asignararle algunos parámetros
obligatoriamente algunos (
tipo de campo o
tipo de campo y dimensión) y otros
opcionales que los entendidos llaman
flags.
¿Qué te olvidaste de los tipos de campos?
Pulsa aquí y míralos y de paso un recordatorio... lo que aparece en
negrita es lo obligatorio, lo que aparece
entre corchetes y en cursiva lo voluntario.
Estos son los
flags pueden ser devueltos si tu versión de MySQL los soporta:
- NOT NULL que significa que no se permiten valores nulos en ese campo.
- UNSIGNED que significa que que no se admiten número negativos en ese campo. Es evidente que no debe usarse en los campos tipo cadena.
- ZEROFILL que significa que ese campo se rellenará con CEROS por la izquierda de forma automática.
- BINARY que significa que guarda los datos en formato binario donde si discrimina entre mayúsculas/minúsculas.
- AUTO_INCREMENT que significa que ese campo (númerico entero, por supuesto) toma valores de forma autómatica (incrementa en una unidad el último valor) cada vez que se añade un nuevo registro.
En MySQL los campos autoincrementales siempre tienen que ser definidos como índices del tipo PRIMARY KEY.
- DEFAULT "cadena" ó DEFAULT número que asignan por defecto al campo el valor de la cadena (hay que ponerla entre comillas) o el del número, según se trate de campos tipo cadena o tipo numérico.
- UNIQUE (nombre campo) define un índice único para el campo especificado. Evidentemente, si es único solo puede definirse para un campo y obviamente también el campo debe estar definido.
Pará definir un campo como único no puede tener asignado NOT NULL.
Un campo al que se ha asignado un índice UNIQUE NO ADMITE VALORES IDENTÍCOS en dos registros distintos de la tabla.
- PRIMARY KEY(nombre campo) define un índice principal para el campo especificado. Solo puede definirse para un campo y es incompatible con UNIQUE.
Requiere que el campo haya sido definido como NOT NULL.
Tampoco admiten valores duplicados los campos definidos como PRIMARY KEY.
- INDEX(campoX, campoY) define un índices para los campos especificados. Solo puede definirse si hay otro campo definido como PRIMARY KEY. Los campos INDEX tienen que estar definidos como NOT NULL.
Traqui... ya se que no hemos hablado aun de los
índices.. paciencia... todo llega...:-)