Vous êtes sur la page 1sur 56

PHP y MYSQL

1. Instalacin de Apache+PHP+MySQL
o Instalacin en Windows
o Instalacin en Linux/Unix
2. Sintaxis en PHP
o Mi primer script
o Variables y Operadores
o Seriables y Operadores
o Sentencias de Control
o Las Tablas
o Las unciones
o Include!" y re#uire!"
o Tiempo y $ec%a
o Las Clases en &'&
3. Formularios
o Los ormularios
o (escar)a de arc%i*os desde un $ormulario
4. Ficheros
o unciones de acceso a $ic%eros
5. Comenando con MySQL
o MyS+L
o unciones &'& de acceso a MyS+L
o Conectar a MyS+L desde &'&
o Creacin de una ,ase de (atos en MyS+L
o Importar bases de datosre$-.mys#l/importar/db/access0p%p.1Importar bases
de datos desde MS 2ccess
o Mostrar los datos de una consulta
o Un buscador para nuestra base de datos
6. !peraciones con re"istros
o 23adir re)istros
o Modi$icar re)istros
o ,orrar re)istros
o Todo a la *e4
7. Conexin a MySQL con !#$C
o Instalacin de My(O,C
o Conexin remota a MyS+L con MS 2ccess
o 5xportar tablas desde MS 2ccess a MyS+L
o Importar tablas desde MyS+L a MS 2ccess
Instalacin de Apache+PHP+MySQL en %indo&s
5n este cap6tulo describiremos el proceso de instalcin de la base de datos MyS+L7 de un
ser*idor web 2pac%e con &'&7 en una m8#uina con sistema operati*o Windows0
Lo primero #ue debemos %acer es conse)uirnos los pro)ramas necesarios7 y #ue me9or para ello
#ue diri)uirnos a las p8)inas web !o cual#uiera de sus mirros" de los pro)ramas en cuestin:
cual#uiera de sus mirros" de los pro)ramas en cuestin:
o Apache: www0apac%e0or)
apac%e/;/</x/win<=0exe
o MySQL: www0mys#l0com
mys#l>s%areware><0==0<?>win04ip
o PHP: www0p%p0net
p%p><0@0x>win<=04ip
'!(A) La *ersin para sistemas Windows de MyS+L no es )ratuita0 &or lo #ue
usaremos la *ersin s%areware #ue est8 limitada a <@ d6as0
La instalacin de estos pro)ramas es muy $8cil7 &'& y MyS+L *ienen comprimidos en
$ormato AI& y slo los tenemos #ue descomprimir en una carpeta7 mientras #ue 2pac%e
es autoe9ecutable:
o (escomprimimos &'& en .C:Bp%p<.
o (escomprimimos MyS+L en .C:Bmys#l.
o 'acemos .doble clicC. en el $ic%ero de 2pac%e y aceptamos el directorio de
instalacin por de$ecto .C:B2rc%i*os de &ro)ramasB2pac%e DroupB2pac%e.0
Ea tenemos instalados los pro)ramas7 a%ora slo nos #ueda %acer unos pe#ue3os a9uste
de con$i)uracin:
APACH*
de con$i)uracin:
APACH*
5ditamos el $ic%ero de con$i)uracin http+con, #ue se %alla en C:B2rc%i*os de
&ro)ramasB2pac%e DroupB2pac%eBcon$B.
,uscamos la l6nea donde pone:
#ServerName new.host.name
+uitamos el comentario !#" y la cambiamos por:
ServerName http://localhost
Indicamos el directorio de &'&:
ScriptAlias /php3 "C:\php3"
(e$inimos la extencin de los script &'&:
AddType application/xhttpdphp3 .php3
AddType application/xhttpdphp3 .php
AddType application/xhttpdphp3 .phtml
E asi)namos la aplicacin para las extensiones &'&:
Action application/xhttpdphp3 "/php3/php.exe"
&or de$ecto los $ic%eros #ue son accesibles desde el na*e)ador se encuentran el la
carpeta htdocs del directorio de 2pac%e7 pero la podemos cambiar:
!oc"ment#oot "C:\www"
$!irectory "C:\www"%
......
$/!irectory%
PHP
&ara con$i)urar &'&7 primero buscamos el $ic%ero php-+ini.distphp-+ini.dist y lo
renom/ramos a php+ini0 despu1s lo editamos y le hacemos los si"uientes
cam/ios)
$uscamos la expresin 2extension3dir2 y la cam/iamos por)
extension_dir = C:\php3
Para a4adir el soporte para MySQL /usca la l5nea)
; extension = php3_mysql.dll
C6m/iala por)
extension = php3_mysql.dll
Copia el ,ichero php-+ini en 2C)7&indo&s72

*8ecucin de los pro"ramas)
Pues /ien0 ya solo nos 9ueda arrancar los pro"ramas)
C:\Archivos de Progrmas\Apache ro!p\Apache\apache.exe
C:\mysql\"in\mysqld.exe
#Para la versi#n share$are
C:\mysql\"in\mysqld%share$are.exe
(am/i1n podemos arrancar el ser:idor Apache desde el men; de inicio)
&nicio%'Progrmas%'Apache (e" )erver%')tart
Para compro/ar nuestra instalacin crea un ,ichero llamado test+php- con la
si"uiente linea)
*+php phpin,o-. +'
Colcalo en el directorio de documentos de Apache y ll6malo desde el
na:e"adentos de Apache y ll6malo desde el na:e"ador+ Si lo hemos hecho todo
/ien nos saldr6 una p6"ina con todas las :aria/les de PHP+
'!(A)
Ca/e destacar 9ue lo 9ue hemos echo es una instalacin /6sica0 por lo 9ue
recomendamos leer los manuales de las distintas aplicaciones para o/tener
m6s detalles so/re la instalacin de 1stas+
Instalacin de Apache+PHP+MySQL en Linux<=nix
5n este cap6tulo describiremos el proceso de instalcin de la base de datos MyS+L7 de un
ser*idor web 2pac%e con &'&7 en una m8#uina con sistema operati*o Linux o Unix0
Lo primero #ue debemos %acer es conse)uirnos los pa#uetes necesarios7 y #ue me9or para ello
#ue diri)uirnos a las p8)inas web !o cual#uiera de sus me9or para ello #ue diri)uirnos a las
p8)inas web !o cual#uiera de sus mirros" de los pro)ramas en cuestin:
Apache: www0apac%e0or)
o apac%e>;0<0x0tar0)4
MySQL: www0mys#l0com
o mys#l></==/==/tar0)4
PHP: www0p%p0net
o p%p><0@0x0tar>)4
&ara poder reali4ar todo el proceso de instalacin %as de tener acceso como root a la m8#uin
Linux0
Lo primero #ue debemos %acer un directorio de instalacin7 aun#ue lo normal ser6a #ue lo
%icieramos en <usr<local7 <urs<src7 o bien en <opt0 Como %ay #ue esco)er uno7 yo *oy %a
esco)er el primero7 <usr<local7 aun#ue el proceso ser6a el mismo si nos declin8ramos por
cual#uier otro0
Supon)amos #ue ya nos %emos conse)uido los pa#uetes y los tenemos en el directorio
<root<install7 lo primiero #ue %acemos es descomprimirlos:
cd /"sr/local
tar &xv' /root/install/apache(.3.x.tar.)&
tar &xv' /root/instal/mys*l3.++.x.tar.)&
toot/instal/mys*l3.++.x.tar.)&
tar &xv' /root/instal/php3.,.x.tar)&
Creamos enlaces sencillos !blandos" a cdi)o $uente
ln s /"sr/local/apache(.3.x /"sr/local/apache
ln s /"sr/local/mys*l3.++.x /"sr/local/mys*l
ln s /"sr/local/php3.,.x /"sr/local/php
&reparamos la $uentes par al compilacin de 2pac%e
cd /"sr/loca/apache
./con'i)"re pre'ix-/"sr/local/apache
Compilamos e instalamos MyS+L
cd /"sr/local/mys*l
./con'i)"re wito"tde.") pre'ix-/"sr/local/mys*l
ma/e
ma/e install
cp /"sr/local/s"pport'iles/mys*l.server /etc/rc.d/init.d/mys*l
chmod 011 /etc/rc.d/init.d/mys*l
Creamos la bases del datos del sistema MyS+L
/"sr/local/mys*l/.in/mys*l2install2d.
2rrancamos el ser*idor MyS+L
/etc/rc.d/init.d/mys*l start/etc/rc.d/init.d/mys*l start
2si)namos la password del adminstrador !root " de MyS+L
/"sr/local/mys*l/.in/mys*ladmin " root password "clave"
Ea %emos terminado con MyS+L7 a%ora compilaremos &'& como mdulo de 2pac%e0
cd /"sr/local/php
./con'i)"re withmys*l-/"sr/local/mys*l \
withapache-/"sr/local/apache \
ena.letrac/vars
ma/e
ma/e install
#cp php3.inidist /"sr/local/li./php3.ini
Compilamos 2pac%e
cd /"sr/local/apache
./con'i)"re pre'ix-/"sr/local/apache \
activatemod"le-src/mod"les/php3/li.php3.a
# si hemos compilado 3435 "tili&aremos
#activatemod"le-src/mod"les/php5/li.php5.a
# *"itar los comentarios para ha.ilitar el m6d"lo de proxy
#activatemod"le-src/mod"les/proxy/li.proxy.a$ proxy mod"les%
ma/e
ma/e install
&ara de$inir las extenciones de los scripts &'&7 %ay #ue a3adir las si)uientes lineas en el $ic%ero
de con$i)uracin de apac%e !httpd.con,":
AddType application/xhttpdphp3 .php3
AddType application/xhttpdphp3 .php
AddType application/xhttpdphp3 .phtml
2%ora ya slo nos #ueda arrancar el ser*idor7 pero primero copiamos el script de arran#ue en
/etc/rc0d/init0d
cp /"sr/local/apache/.in/apachecte /etc/rc.d/init.d/apache
/etc/rc.d/init.d/apache start
&ara comprobar nuestra instalacin crea un $ic%ero llamado test0p%p< con la si)uiente linea:
$7php phpin'o89 7%
Colcalo en el directorio de documentos de 2pac%e y ll8malo desde el na*e)ador0 Si lo %emos
%ec%o todo bien nos saldr8 una p8)ina con todas las *ariables de &'&0
'!(A)
Cabe destacar #ue lo #ue %emos ec%o es una instalacin /6sica7 por lo #ue recomendamos
leer los manuales de las distintas aplicaciones para obtener m8s detalles sobre la instalacin de
Fstas0


Mi primer script
Una *e4 #ue ya tenemos instalados PHP y MySQL7 y el ser*idor Apache con$i)urado para
usarlos7 podemos comen4ar a escribir nuestro primer script en &'&0
*8emplo script php
$html%
$.ody%
$7php
:myvar - "4ola. ;ste es mi primer script en 343 \n"<
//;sto es "n comentario
es mi primer script en 343 \n"<
//;sto es "n comentario
echo :myvar<
7%
$/.ody%
$/html%
Una *e4 escrito esto lo sal*amos en un $ic%ero con la extensin php3 !la nue*a *ersin de &'&7
la ?7 utili4a la extensin php"7 y lo colocamos en nuestro ser*idor7
http://mi_servidor/php/test.php30 2%ora si ponemos esta UGL en nuestro na*e)ador
*eremos una l6nea con el texto 2Hola+ *ste es mi primer script en PHP20
Lo primero #ue apreciamos en el script son sus delimitadores0 5n la primera l6nea del script
*emos *+php #ue nos indica #ue comien4a un script en &'&7 y en la Hltima colocamos +' para
indicar el $inal del script0 'ay #ue destacar #ue todas las l6neas #ue se encuentre entre estos
delimitadores deben acabar en punto y coma7 excepto las sentencias de control !i$7 swic%t7
w%ile7 etc0"0
Como en toda pro)ramacin7 es importante poner muc%os comentarios7 para lo cual si #ueremos
comentar una sola l6nea tenemos #ue poner al principio de la l6nea //7 si lo #ue #ueremos es
comentar *arias utili4aremos los delimitadores /0 % 0/0
&ara #ue el ser*idor en*iF texto utili4aremos la instruccin echo7 aun#ue tambiFn podemos
utili4ar print, de uso similar al del C o Perl0
inalmente7 *emos #ue la palabra myvar comien4a con el si)no dlar !1" 0 5ste s6mbolo le indica
a PHP #ue es una *ariable0 Iosotros le %emos asi)nado un texto a esta *ariable7 pero tambiFn
pueden contener nHmeros o tablas !arrays"0 5s importante recordar #ue todas las *ariables
comien4a con el si"no dlar0 TambiFn %abrFis obser*ado #ue el texto #ue le asi)namos a la
*ariable termina con \n7 esto no se imprime sir*e para indicarle al na*e)ador una nue*a l6nea0

>aria/les y operadores
2%ora antes de se)uir7 *amos a *er un poco de teor6a7 la sintaxis en &'&0
>aria/les)
Como *imos antes todas la *ariables deben precedidas por si"no dlar !1"7 y le asi)namos
contenido con el si"no i"ual !="0 Con las *ariables7 &'& distin"ue entre mayHsculas y
minHsculas7 por lo #ue bles7 &'& distin"ue entre mayHsculas y minHsculas7 por lo #ue no es lo
mismo 1myvar #ue 12yvar7 Fstas son dos *ariables totalmente distintas0
$html%
$.ody%
$7php
:myvar - "S;=>??A \n"<
:@yvar - "@A!#>! \n"<
//;sto imprimirA S;=>??A
echo :myvar<
//;sto imprimirA @A!#>!
;C4B :@yvar<
7%
$/.ody%
$/html%
Como *eis %e utili4ado dos $ormas de escribir echo7 en mayHsculas y en minHsculas7 para
indicaros #ue PHP no las distin"ue a la %ora de usar $unciones o sentencias del len)ua9e0
5l uso de la barra in*ertida7 como en \n7 no es obli)atorio7 pero ayuda a la depuracin del
cdi)o #ue en*iamos al na*e)ador7 adem8s del \n existen otros usos:
\3 Car8cter dobles comillas
\\ Car8cter barra in*ertida
\n Iue*a l6nea
\r Getorno de carro
\t (a/ulador horiontal
Constantes)
Las constantes son similares a las :aria/les0 con la sal:edad de 9ue no lle:an el si"no
dlar delante0 y slo la podemos asi"nar una :e+ Para de,inir una constantes
usaremos la ,uncin de,ine como si"ue)
*html'
*"ody'
*+php
de,ine -3C45)6A56738 39ola 2!ndo3.;
print, -C45)6A567.;
+'
*/"ody'
*/html'
PHP crea di:ersas constantes al arrancar0 como PHP3>*?SI!' 9ue contiene la :ersin
de PHP0 (?=* 9ue le asi"na @ o FALS* 9ue le asi"na A+
!peradores Aritm1ticos)
1a : 1" Suma
1a % 1" ?esta
1a 0 1" Multiplicacin
1a / 1" BssCcodi"oenlineaDEa < E/ #i:isin
1a ; 1" ?esto de la di:isin de Ea por E/
1a:: Incrementa en @ a Ea
1a%% ?esta @ a Ea
!peradores de Cadenas)
*l ;nico operador de cadenas 9ue existen es el de concatenacin0 el punto+ Pero no os
asust1is0 PHP dispone de toda una /ater5a de ,unciones 9ue os permitir6n tra/a8ar
cmodamente con las cadenas+
1a = 39ola3;
1" = 1a . 32!ndo3; << Ahora E/ contiene 2Hola Mundo2
*n este punto hay 9ue hacer una distincin0 la interpretacin 9ue hace PHP de las
simples y do/les comillas+ *n el se"undo caso PHP interpretar6 el contenido de la
cadena+
1a = 32!ndo3;
echo = <9ola 1a<; <<*sto escri/ir6 2Hola Ea2
echo = 39ola 1a3; <<*sto escri/ir6 2Hola MundoB9F //5sto escribir8
.'ola Mundo.
!peradores de Comparacin)
1a * 1" Ja menor 9ue Jb
1a ' 1" Ja mayor 9ue Jb
1a *= 1" Ja menor o i"ual 9ue Jb
1a '= 1" Ja mayor o i"ual 9ue Jb
1a == 1" Ja i"ual 9ue Jb
1a == 1" Ja distinto 9ue Jb
!peradores L"icos)
1a A5> 1" Verdadero si ambos son *erdadero
1a ?? 1" Verdadero si ambos son *erdadero
1a 4@ 1" Verdadero si al)uno de los dos es *erdadero
1a == 1" Verdadero si al)uno de los dos es *erdadero
1a A4@ 1" Verdadero si slo uno de los dos es *erdadero
=1a Verdadero si Ja es $also7 y rec6procamente
!peradores de Asi"nacin)
1a = 1" Asi"na a Ja el contenido de Jb
1a := 1" Le suma a Jb a Ja
1a %= 1" Le resta a Jb a Ja
1a 0= 1" Multiplica Ja por Jb y lo asi)na a Ja
1a /= 1" #i:ide Ja por Jb y lo asi)na a Ja
1a .= 1" A4ade la cadena Jb a la cadena Ja

Sentencias de control
Las sentencias de control permiten e9ecutar blo#ue de cdi)os dependiendo de unas condiciones0
&ara &'& el @ es e#ui*alente a also y cual#uier otro nHmero es Verdadero0
IF+++*LS*
La sentencia IF+++*LS* permite e9ecutar un blo#ue de instrucciones si la condicin es
>erdadera y otro blo#ue de instrucciones si Fsta es Falsa0 5s importante tener en cuenta #
instrucciones si Fsta es Falsa0 5s importante tener en cuenta #ue la condicin #ue e*aluemos %a
de estar encerrada entre par1ntesis !esto es aplicable a todas la sentencias de control"0
i' 8condici6n9 C
;ste .lo*"e se eDec"ta si la condici6n es =;#!A!;#A
E else C
;ste .o*"e se eDec"ta si la condici6n es FA?SA
E
5xiste una $orma sencilla de usar la sentencia I cuando no tenemos #ue usar el 5LS5 y solo
tenenemos #ue e9ecutar una l6nea de cdi)o0
i' 8:a % 59 echo ":a es mayor *"e 5"<

IF+++*LS*IF+++*LS*
La sentencia I0005LS5I0005LS5 permite e9ecuta *arias condiciones en cascada0 &ara este caso
*eremos un e9emplo7 en el #ue utili4aremos los operadores l)icos0
$7php
i' 8:nom.re -- ""9C
echo "TG no tienes nom.re"<
E elsei' 88:nom.re--"eva"9 B# 8:nom.re--";va"99 C
echo "
echo "T" nom.re es ;=A"<$
E else C
echo "T" nom.re es " . :nom.re<
E

S%I(CH+++CAS*+++#*FA=L(
Una alternati*a a I0005LS5I0005LS57 es la sentencia SWITC'7 la cu8l e*alHa y compara cada
expresin de la sentencia C2S5 con la expresin #ue e*aluamos7 si lle)amos al $inal de la lista
de C2S5 y encuentra una condicin Verdadera 7 e9ecuta el cdi)o de blo#ue #ue %aya en
(52ULT0 Si encontramos una condicin *erdadera debemos e9ecutar un ,G52K para #ue la
sentencia SWITC' no si)a buscando en la lista de C2S50 Veamos un e9emplo0
$7php
switch 8:dia9 C
case "?"nes":
echo "4oy es ?"nes"<
.rea/<
c
case "@artes":
echo "4oy es @artes"<
.rea/<
case "@iercoles":
echo "4oy es @iercoles"<
.rea/<
case "H"eves":
echo "4oy es H"eves"<
.rea/<
case "=iernes":
echo "4oy es =iernes"<
.rea/<
case "SA.ado":
echo "4oy es SA.ado"<
.rea/<
case "!omin)o":
echo "4oy es !omin)o"<
.rea/<
de'a"lt:
de$ault:
echo ";sa cadena no corresponde a nin)Gn dIa de la semana"<
E
7%

%HIL*
La sentencia W'IL5 e9ecuta un blo#ue de cdi)o mientras se cumpla una determinada condicin0
$7php
:n"m - (<
while 8:n"m $ 19 C
echo :n"m<
:n"mJJ
E
7%
&odemos romper un bucle W'IL5 utili4ando la sentencia $?*AG0
$7php
:n"m - (<
while 8:n"m $ 19 C
echo :n"m<
i' 8:n"m -- 39C
echo "A*"I nos salimos \n"<
.rea/
E
:n"mJJ
E
7%

#!+++%HIL*
5sta sentencia es similar a W'IL57 sal*o #ue con esta sentencia primero e9ecutamos el blo#ue
de cdi)o y despuFs se e*alHa la condicin7 por lo #ue el blo#ue de cdi)o se e9ecuta siempre al
menos una *e40
$7php
:n"m - (<
do C
echo :n"m<
i' 8:n"m -- 39C
echo "A*"I nos salimos \n"<
.rea/
E
:n"mJJ
E while 8:n"m $ 19<
7%

F!?
5l bucle OG no es estrictamente necesario7 cual#uier bucle OG puede ser sustituido $8cilmente
por otro W'IL50 Sin embar)o7 el bucle OG resulta muy Htil cuando debemos e9ecutar un blo#ue
de cdi)o a condicin de #ue una *ariable se encuentre entre un *alor m6nimo y otro m8ximo0 5l
bucle OG tambiFn se puede romper mediante la sentencia $?*AG0
$7php
'or 8:n"m - (< Sn"m $-1< :n"mJJ9C
echo :n"m<
i' 8:n"m -- 39C
echo "A*"I nos salimos \n"<
.rea/
E
E
7%

Las ta/las
Las tablas !o array en in)lFs"7 son muy importantes en &'&7 ya #ue )eneralmente7 las $unciones
#ue de*uel*en *arios *alores7 como las $unciones li)adas a las bases de datos7 lo %acen en
$orma de tabla0
5n &'& disponemos de dos tipos de tablas0 5l primero ser6a el cl8sico7 utili4ando 6ndices:
$7php
:ci"dadKL - "3arIs"<
JciudadLM - .&ar6s.N
:ci"dadKL - "#oma"<
:ci"dadKL - "Sevilla"<
:ci"dadKL - "?ondres"<
print 8"yo vivo en " . :ci"dadK+L . "$M#%\n"9<
7%
5sta es una $orma de asi)nar elementos a una tabla7 pero una $orma m8s $ormal es utili4ando la
$uncin array
$7php
:ci"dad - array8"3arIs"N "#oma"N "Sevilla"N "?ondres"9<
//contamos el nGmero de elementos de la ta.la
:n"melentos - co"nt8:ci"dad9<
//imprimimos todos los elementos de la ta.la
'or 8:i-,< :i $ :n"melentos< :iJJ9
C
print 8"?a ci"dad :i es :ci"dadK:iL $M#%\n"9<
E
7%
Sino
7%
Sino se especi$ica7 el primer 6ndice es el cero7 pero podemos utili4ar el operador =' para
especi$icar el indice inicial0
:ci"dad - array8(-%"3arIs"N "#oma"N "Sevilla"N "?ondres"9<
Un se)undo tipo7 son las ta/las asociati:as7 en las cu8les a cada elemento se le asi)na un
*alor !Cey" para acceder a Fl0
&ara entenderlo7 #ue me9or #ue un e9emplo7 supon)amos #ue tenemos una tabla en al #ue cada
elemento almacena el nHmero de *isitas a nuestra web por cada d6a de la semana0
Utili4ando el mFtodo cl8sico de 6ndices7 cada d6a de la semana se representar6a por un entero7 @
para lunes7 ; para martes7 etc0
:visitasK,L - +,,<
:visitasK(L - (OP<
si usamos las tablas asociati*as ser6a
:visitasK"l"nes"L - +,,<
:visitasK"martes"L - (OP<
o bien7
:visitas - array8"l"odi)o"%:visitas - array8"l"nes"-%+,,< "martes"-%(OP9<
2%ora bien7 recorrer una tabla y mostrar su contenido es sencillo utili4ando los 6ndices7 pero
Ocmo %acerlo en las tablas asociati*asP0 La manipulacin de las tabas asociati*as se a %ace
tra*Fs de $unciones #ue actHan sobre un puntero interno #ue indica la posicin0 &or de$ecto7 el
puntero se situa en el primer elemento a3adido en la tabla7 %asta #ue es mo*ido por una
$uncin:
c!rrent > de*uel*e el *alor del elemento #ue indica el puntero
pos > reali4a la misma $uncin #ue current
reset > mue*e el puntero al primer elemento de la tabla
end > mue*e el puntero al ;ltimo elemento de la tabla
next > mue*e el puntero al elemento si9uiente
prev > mue*e el puntero al elemento anterior
co!ntQn co!nt > de*uel*e el nHmero de elementos de una tabla0

Veamos un e9emplo de las $unciones anteriores:
$7php
:semana - array8"l"nes"N "martes"N "miQrcoles"N "D"eves"N "viernes"N "sA.ado"N
"domindo"9<
echo co"nt8:semana9< //0
//sit"amos el p"ntero en el primer elemento
reset8:semana9<
echo c"rrent8:semana9< //l"nes
next8:semana9<
echo pos8:semana9< //martes
end8:semana9
echo pos8:semana9< //domin)o
prev8:semana9<
echo c"rrent8:semana9< //sA.ado
7%
Gecorrer una tabla con las $unciones anteriores se %ace un poco lioso7 para ello se recomienda
utili4ar la $uncin each-.0
$7.
$7php
:visitas - array8"l"nes"-%+,,N "martes"-%(OPN "miQrcoles"-%(R,N
"D"eves"-%(019<
reset8:visitas9<
while 8list8:claveN :valor9 - each8:visitas99
C
echo "el dIa :clave ha tenido :valor visitas$M#%"<
E
7%
La $uncin each-.de*uel*e el *alor del elemento actual7 en este caso7 el *alor del elemento
actual y su cla*e7 y despla4a el puntero al si)uiente7 cuando lle)a al $inal de*uel*e FALS!7 y
termina el bucle $hile-.0
(a/las multidimensionales
Las tablas multidimensionales son simplemente tablas en las cuales cada elemento es a su *e4
otra tabla0
$7php
:calendarioKL - array 8(N "enero"N 3(9<
:calendarioKL - array 8+N "'e.rero"N +O9<
:calendarioKL - arra
:calendarioKL - array 83N "mar&o"N 3(9<
:calendarioKL - array 85N "a.ril"N 3,9<
:calendarioKL - array 81N "mayo"N 3(9<

while 8list8:claveN :valor 9 - each8:calendario99C
C
:cadena - :varlorK(L<
:cadena .- " es el mes nGmero " . :valorK,L<
:cadena .- "y tiene " . :varlorK+L . " dIas$M#%"<
echo :cadena<
E
7%
La $uncin list-. es m8s bien un operador de asi)nacin7 lo #ue %ace es asi)nar *alores a
unas lista de *ariables0 5n este caso los *alores son extraidos de una tabla por la $uncin
each-.0
Las ,unciones
Muc%as *eces7 cuando traba9amos en el desarrolo de una aplicacin7 nos sur)e la necesidad de
e9ectar un mismo blo#ue de cdi)o en di$erentes partes de nuestra aplicacin0 Una Funcin no
es m8s #ue un blo#ue de cdi)o al #ue le pasamos una serie de par8metros y nos de*uel*e un
*alor0 Como todos los len)ua9e de pro)ramacin7 &'& trae una )ran cantidad de $unciones para
nuestro uso7 pero las $unciones m8s )ran cantidad de $unciones para nuestro uso7 pero las
$unciones m8s importantes son las #ue nosotros creamos0
&ara declara una $uncion debemos utili4ar la instruccin ,!nction se)uido del nombre #ue le
*amos a dar7 y despuFs entre parentesis la lista de ar)umentos separados por comas7 aun#ue
tambiFn %abr8 $unciones #ue no reco)an nin)Hn ar)umento0
'"nction nom.re2de2'"ncion 8ar)2(N ar)2+N ...N ar)2n9
C
.lo*"e de c6di)o
E
Cual#uier instruccin *8lida de &'& puede aparecer en el cuerpo !lo #ue antes %emos llamado
blo#ue de cdi)o" de una $uncin7 incluso otras $unciones y de$iniciones de clases0
5n &'& no podemos rede$inir una $uncin pre*iamente declarada7 y adem8s en &'&<7 las
$unciones deben de$inirse siempre antes de #ue se in*o#uen7 en &'&? este re#uerimiento ya no
existe0
La instruccin ?*(=?'
Cuando in*ocamos una $uncin7 la e9ecucin del pro)rama pasa a e9ecutar las l6neas de cdi)o
#ue conten)a la $uncin7 y una *e4 terminado7 el pro)rama continua su e9ecucin desde el punto
en #ue $uF llamada la $uncin0
5xiste una manera de terminar la e9ecucin de la $uncin aun#ue aHn %aya cdi)o por e9ecutar7
mediante el u %aya cdi)o por e9ecutar7 mediante el uso de la instrucin ret!rn terminamos la
e9ecucin del cdi)o de una $uncin y de*ol*emos un *alor0 &odemos tener *arios ret!rn en
nuestra $uncin7 pero por lo )eneral7 cuantos m8s ret!rn ten)amos menos reutili4able ser8
nuestra $uncin0
$7php
'"nction mayor 8:xN :y9
C
i' 8:x % :y9 C
ret"rn :x." es mayor *"e".:y<
E else C
ret"rn :y." es mayor *"e".:x<
E
E
7%
2un#ue #uedari8 me9or:
$7php
'"nction mayor 8:xN :y9
C
:ms) - ""<
i' 8:x % :y9 C
:ms) - :x." es mayor *"e".:y<
E else C
:ms) - :y." es mayor *"e".:x<
E
ret"rn :ms)<
E
7%
Con la instrucin ret!rn puede de*ol*erse cual#uier tipo de *alor7 incluyendo tablas y ob9etos0
&'& solo permite a las $unciones de*ol*er un *alor7 y para sol*entar este pe#ue3o problema7 si
#ueremos #ue nuestra $uncin de*uel*a *arios tenemos #ue utili4ar una tabla !array"0

Par6metros de las ,unciones
5xisten dos $ormas de pasar los par8metros a una $uncin7 por :alor o por re,erencia0
Cuando pasamos una *ariable por :alor a una $uncion7 ocurra lo #ue ocurra en Fsta en nada
modi$icar8 el contenido de la *ariable0 Mientras #ue si lo %acemos por re,erencia7 cual#uier
cambio acontecido en la $uncin sobre la *ariable lo %ar8 para siempre0
5 *ariable lo %ar8 para siempre0
5n &'&7 por de$ecto7 las *ariables se pasan por *alor0 &ara %acerlo por re$erencia debemos
anteponer un ampersand !?" a la *ariable0
$7php
'"nction s"ma 8:xN :y9
C
:x - :x J (<
ret"rn :xJ:y<
E
:a - (<
:. - +<

//parAmetros por valor
echo s"ma 8:aN :.9< // imprimirA 5
echo :a< // imprimirA (

//parAmetros por re'erencia
echo s"ma 8S:aN :.9< // imprimirA 5
echo :a< //imprimirA +
7%
Si #ueremos #ue un par8metro de una $uncin se pase siempre por re$erencia debemos
anteponer un ampersand !?" al nombre del par8metro en la de$inicin de la $uncin0
5n &'& podemos de$inir *alores por de$ecto para los par8metro de una $uncin0 5stos *alores
tienen #ue ser una expresin constante7 y no una *ariable o miembro de una clase0 2dem8s
cuando usamos par8metros por de$ectos7 Fstos deben estar a la derec%a de cual#uier par8metro
sin *alor por de$ecto7 de otra $orma &'& nos de*ol*er8 un error0
$7php
'"nction s"ma 8:x-(N :y9
C
:x - :x J (<
ret"rn :xJ:y<
E
7%
Si e9ecutarmos esta $uncin nos dar6a error7 ya #ue %emos dado a 1x el *alor B por de$ecto y la
%emos colocado a la i4#uierda de un par8metro #ue no tiene *alor por de$ecto0 La $orma correcta
es:
$7php
RPp%p
'"nction s"ma 8:yN :x-(9
C
:x - :x J (<
ret"rn :xJ:y<
E
7%
Cabe destacar #ue &'&< no soporta un nHmero *ariables de par8metros7 pero &'&? s60
Lle)ados a este punto7 damos un paso atr8s y *ol*emos a las *ariables7 para distin)uir entre
*ariables est8ticas !static" y )lobales !glo"al"0 Las *ariables est8ticas se de$inen dentro de
una $uncin7 la primera *e4 #ue es llamada dic%a $uncin la *ariable se iniciali4a7 )uardando su
*alor para posteriores llamadas0
$7php
'"nction contador 89
C
static :co"nt - ,<
:co"nt - :co"nt J (<
ret"rn :co"nt<
E
echo contador89."$M#%"< // imprimirA (
echo contador89."$M#%"< // imprimirA +
echo contador89."$M#%"< // imprimirA 3
7%
Las *ariables )lobales7 no se pueden declarar dentro de una $uncin7 lo #ue %acemos el llamar a
una *ariable #ue ya %a sido declarada7 tomando el *alor #ue ten)a en ese momento7 pudiendo
se modi$icado en la $uncin0
$7php
var :a - (<
'"nction ver2a89
C
)lo.al :a<
echo :a."$M#%"< // imprimirA el valor de :a

:a J- (< // s"mamos ( a :a
E
echo ver2a89< // imprimirA (
echo ver2a89< // imprimirA +
:a - 0<
echo ver2a89< // imprimirA 0
echo ver2a89< // imprimirA O
7%

Funciones >aria/le
&'& soporta el concepto de ,unciones :aria/les7 esto es si)ni$ica #ue si una *ariable tiene
unos parentesis a3adidos al $inal7 &'& buscar8 un $uncin con el mismo nombre #ue el contenido
de la *ariable7 e intentar8 e9ecutarla0
$7php
'"nction imprime8:texto9 C
echo :texto . "\n"<
E
'"nction imprimeNe)rilla8:texto9C
echo "$M%:texto$/M%\n"<
E
:@iF"nc - "imprime"<
:@iF"nc8"4ola"9< //imprimirA 4ola
:@iF"nc - "imprimeNe)rilla"<
:@iF"nc8"4ola"9< //imprimirA 9ola
7%
?ecursin
&'& t1Gecursin
&'& tambiFn permite la recursin7 es decir7 una $uncin se puede llamar as6 misma0 &ara aclarar
el concepto de recursin7 *amos a crear una $uncin #ue comprueba si un nHmero es entero o
no0
Un nHmero #ue no sea entero !ST?"7 tiene una parte entera y otra decimal !comprendida entre @
y ;"7 lo #ue *amos a %acer para comprobar si un nHmero es entero o no7 ser8 restarle ; al
nHmero en cuestin %asta #ue nos #ue demos sin parte entera7 y entoces comprobaremos si
tiene parte decimal !un poco lioso todo Fsto"0
$7php
'"nction es;ntero8:n"mero9 C
i' 8:n"mero % (9 C
ret"rn 8es;ntero8:n"mero (99<

E elsei' 8:n"mero $ ,9 C
/T como los nGm. son simQtricos
che*"eamos lo convertimos a positvo T/
ret"rn 8es;ntero88(9 T :n"mero (99<

E elsei' 88:n"mero % ,9 AN! 8:n"mero $ (99 C
ret"rn 8"NB"9<
E else C
/T el cero es entero por de'inici6n T/
ret"rn 8"S>"9<
E

E //'in '"nction

echo "U;s , "n nGmero entero7 ".es;ntero8,9."\n"<
echo "U;s 3.1 "n nGmero entero7 ".es;ntero83.19."\n"<
echo "U;s 0 "n nGmero entero7 ".es;ntero809."\n"<
echo "U;s R.+ "n nGmero entero7 ".es;ntero8R.+9."\n"<

7%

Cmo ahorranos l5neas de cdi"o
Cmo a%orranos l6neas de cdi)o
5n las lecciones anteriores %emos aprendido el uso b8sico de las $unciones de &'& para traba9ar
con MyS+L0 5n esta leccin y sucesi*as *amos a *er nue*as $unciones #ue nos $acilitan y
potencian nuestras p8)inas web0
&or lo )eneral7 todos nuestros script tienen partes de cdi)o i)uales7 las $uncines include!" y
req!ire-. nos *an a%orrar muc%as de estas lineas de cdi)o0 2mbas $unciones %acen una
llamada a un determinado $ic%ero pero de dos maneras di$erentes7 con incl!de-.7 insertamos
lo #ue conten)a el $ic%ero #ue llamemos de manera literal en nuestro script7 mientras #ue con
req!ire-.7 le decimos #ue el script necesitar8 parte de cdi)o de se encuentra en el $ic%ero
#ue llama req!ire-.0
Como todo esto es un poco lioso7 *eamos unos e9emplos #ue nos lo aclar80
$7php
incl"de 8"header.inc"9<
echo "4ola @"ndo"<
incl"de 8"'ooter.inc"9<
7%
Si tenemos encuenta #ue el $ic%ero header+inc contiene:
$html%
$.ody%
y el $ic%ero ,ooter+inc contiene:
$/.ody%
$/html%
Iuestro script ser6a e#ui*alente a:
$html%
$.ody%
$7php
$7php
echo "4ola @"ndo"<
7%
$/.ody%
$/html%
2%ora *eamos el script de e9emplo para la $uncin req!ire-.:
$7php
re*"ire 8"con'i).inc"9<
incl"de 8"header.inc"9<
echo :cadena<
incl"de 8"'ooter.inc"9<
7%
(onde el $ic%ero con,i"+inc tendr6a al)o como Fsto:
$7php
:cadena - "4ola @"ndo"<
7%
(iempo y ,echa
5n esta leccin *amos a *er como al)unas $unciones relacionadas con el tiempo y la $ec%a7 as6
como al)unos e9emplos pr8cticos0

time
(e*uel*e el numero de se)undos transcurridos desde el ; de 5nero de ;US@0 2 esta $orma de
expresar $ec%a y %ora se le denomina tmestamp+

dateH,ormato0 timestampI
La $unci date de*uel*e una cte!$ormato7 timestamp"
La $unci date de*uel*e una cadena $ormateada se)Hn los cdi)o de $ormato0 Si no le pasamos
la *ariable timestamp nos de*uel*e la cadena $ormateada para la $ec%a y la %ora actual0
Los cdi)os de $ormato para la $uncin date son:
C!#IJ! #*SC?IPCIK'
a am o pm
2 2M o &M
d (6a del mes con ceros
( 2bre*iatura del d6a de la semana !in)lFs"
Iombre del mes !in)lFs"
% 'ora en $ormato ;>;=
' 'ora en $ormato @>=<
i Minutos
9 (6a del mes sin ceros
l (ia de la semana
m IHmero de mes !;>;="
M 2bre*iatura del mes !in)lFs"
s Se)undos
y 23o con = d6)itos
E 23o con ? d6)itos
4 (ia del a3o !;><VW"
&ara *er al)unos e9emplos supon)amos #ue a%ora es el S de abril de =@@
&ara *er al)unos e9emplos supon)amos #ue a%ora es el S de abril de =@@@ a las ;? %oras <@
minutos y == se)undos:
date8"dmV"9 % ,0,5+,,,
date8"4:i:s"9 % (5:3,:++
date8"V"9 % +,,,
date8"Vmd4is"9 % +,,,,5,0(53,++
date8"d/m/y 4:i a"9 % ,0/,5/,, (5:3, pm
date8dmV 4:iN time899 % el momento act"al

mLtimeHhora0 min0 se"0 mes0 dia0 a4oI
La $uncion mCtime de*uel*e una *ariable de tipo timestamp a partir de las coordenadas dadas0
La principal utilidad de esta $uncion es la de a3adir o #uitar una determinada cantidad de $ec%a u
%oras a una dada0
$7343
'"nction restar!ias8:n"mdiasN :date9 C
i' 8isset8:date99 C
:date - time89<
E
list8:horaN :minN :se)N :diaN :mesN :anno9 - explodest8:horaN :minN :se)N
:diaN :mesN :anno9 - explode8 " "N date8 "4 i s d m V"99<

:d - :dia :n"mdias<
:'echa - date8"dmV"N m/time8:horaN :minN :se)N :mesN :dN :anno99<
ret"rn :'echa<
E
echo restar!ias819."$M#%"<
echo restar!ias8(,9."$M#%"<
7%

cheLdate Hmes0 dia0 a4oI
La $uncin c%eCdate comprueba si una $ec%a es *8lida7 si es as6 de*uel*e TGU5 y si no lo es
2LS50 Una $ec%a se considera *8lida si el a3o est8 entre ;U@@ y <=SVS7 el mes entre ; y ;=7 y
el dia es menor o i)ual #ue nHmero de d6as total del mes en cuestin0
$7343
i' 8chec/date83(N +N +,,,99 C
echo "?a 'echa es correcta"<
E else C
echo "?a 'echa es incorrecta"<
E
7%
&ara el e9emplo anterior nos dar6a #ue la $ec%a es incorrecta7 $ebrero nunca tiene un d6a <;0
Las clases
Las Clases son m8ximo exponente de la &ro)ramacin Orientada a Ob9etos !&OO"0 &'& no es un
len)ua9e orientad a ob9eto7 pero implementa las caracter6sticas #ue permiten de$inir las clases0
&ero7 O#uF son las Clases y para #ue sir*enP7 empecemos por los se)undo7 sir*en %acer el
cdi)o m8s le)ible7 y lo #ue es m8s importante7 reutili4able0 5scribir una Clase es sin duda m8s
lar)o #ue escribir el cdi)o directamente7 pero a la lar)a es m8s rentable por su portabilidad a
otras 7 pero a la lar)a es m8s rentable por su portabilidad a otras aplicaciones y su
mantenimiento0
Las Clases no son m8s #ue una serie de *ariables y $unciones #ue describen y actHan sobre al)o0
&or e9emplo7 *amos a crear la clase a!tom#vil7 la cual tendr8 di*ersas *ariables7 1color7
1modelo7 1marca7 1potencia7 1matric!la y %abr8 una serie de $unciones #ue actuar8n
sobre la clase a!tom#vil como Precio-.7 Acelerar-.7 Crenar-.7 irar-.y @eparar-.0
Como e9emplo *amos a crear la clase mysql7 #ue nos ser*ir8 para reali4ar consultas a las bases
de datos MyS+L0
$7php
class !M2mys*l C

/T varia.les de conexi6n T/
var :Mase!atos<
var :Servidor<
var :Ws"ario<
var :Clave<


/T identi'icador de conexi6n y cons"lta T/
var :Conexion2>! - ,<
var :Cons"lta2>! - ,<

/T nGmero de error y texto error T/
var :;rrno - ,<
var :;rror - ""<


/T @Qtodo Constr"ctor: Cada ve& *"e creemos "na varia.le
de esta claseN se eDec"tarA esta '"nci6n T/
'"nction !M2mys*l8:.d - ""N :host - "localhost"N :"ser - "no.ody"N :pass - ""9
C
:this%Mase!atos - :.d<
:this%Servidor - :host<
:this%Ws"ario - :"ser<
:this%Clave - :pass<
E

/TConexi6n a la .ase de datosT/
'"nction conectar8:.dN :hostN :"serN :pass9C

i' 8:.d X- ""9 :this%Mase!atos - :.d<
i' 8:host X- ""9 :this%Servidor - :host<
i' 8:"ser X- ""9 :this%Ws"ario - :"ser<
i' 8:pass X- ""9 :this%Clave - :pass<

// Conectamos al servidor
:this%Conexion2>! - mys*l2connect8:this%ServidorN :this%Ws"arioN :this
%Clave9<
i' 8X:this%Conexion2>!9 C
:this%;rror - "4a 'allado la conexi6n."<
ret"rn ,<
E

//seleccionamos la .ase de datos
i' 8XYmys*l2select2d.8:this%Mase!atosN :this%Conexion2>!99 C
:this%;rror - ">mposi.le a.rir ".:this%Mase!atos <
ret"rn ,<
E

/T Si hemos tenido Qxito conectando dev"elve
el identi'icador de la conexi6nN sino dev"elve , T/
ret"rn :this%Conexion2>!<
E

/T ;Dec"ta "n cons"lta T/
'"nction cons"lta8:s*l - ""9C

i' 8:s*l -- ""9 C
:this%;rror - "No ha especi'icado "na cons"lta SZ?"<
ret"rn ,<
E

//eDec"tamos la cons"lta
:this%Cons"lta2>! - Ymys*l2*"ery8:s*lN :this%Conexion2>!9<

i' 8X:this%Cons"lta2>!9 C
:this%;rrno - mys*l2errno89<
:this%;rror - mys*l2error89<
E
/T Si hemos tenido Qxito en la cons"lta dev"elve
el identi'icador de la conexi6nN sino dev"elve , T/
ret"rn :this%Cons"lta2>!<
E

/T !ev"elve el nGmero de campos de "na cons"lta T/
'"nction n"mcampos89 C
ret"rn mys*l2n"m2'ields8:this%Cons"lta2>!9<
E

/T !ev"elve el nGmero de re)istros de "na cons"lta T/
'"nction n"mre)istros89C
ret"rn mys*l2n"m2rows8:this%Cons"lta2>!9<
E

/T !ev"elve el nom.re de "n campo de "na cons"lta T/
'"nction nom.recampo8:n"mcampo9 C
ret"rn mys*l2'ield2name8:this%Cons"lta2>!N :n"mcampo9<
E

/T @"estra los datos de "na cons"lta T/
'"nction vercons"lta89 C

echo "$ta.le .order-(%\n"<

// mostramos los nom.res de los campos
'or 8:i - ,< :i $ :this%n"mcampos89< :iJJ9C
echo "$td%$.%".:this%nom.recampo8:i9."$/.%$/td%\n"<
E
echo "$/tr%\n"<
// mostrarmos los re)istros

while 8:row - mys*l2'etch2row8:this%Cons"lta2>!99 C
echo "$tr% \n"<
'or 8:i - ,< :i $ :this%n"mcampos89< :iJJ9C
echo "$td%".:rowK:iL."$/td%\n"<
E
echo "$/tr%\n"<
E

E


E //'in de la Clse !M2mys*l
7%
Como %abreis obser*ado7 para crear una clase utili4amos la sentencia class7 y adem8s %emos
creado una $uncin con el mismo nombre #ue la clase7 a esa $uncin se le llama constructor y
se e9ecutar8 cada *e4 #ue de$inamos una *ariable de esa clase0 Io es obli)atorina *ariable de
esa clase0 Io es obli)atorio crear un constructor en una de$inicin de clase0
Otra cosa importante en las clases es el operador %'7 con el #ue indicamos una *ariable o
mFtodo !parte derec%a del operador" de una clase !parte i4#uierda del operador"0 &ara %acer
re$erencia a la clase #ue estamos creando dentro de su de$inicin7 debemos utili4ar this0
E a%ora *eamos un e9emplo de la clase #ue %emos creado7 y supon)amos #ue el cdi)o anterior
lo %emos )uardado en un $ic%ero llamado clase3mys9l+inc+php0
$.ody%
$html%
$7php
re*"ire 8"clase2mys*l.inc.php"9<
:miconexion - new !M2mys*l <
:miconexion%conectar8"myd."N "localhost"N "no.ody"N ""9<
:miconexion%cons"lta8"S;?;CT T F#B@ a)enda"9<
:miconexion%vercons"lta89<
7%
$/.ody%
$/html%
Los ,ormularios
Los ormularios no $orman parte de &'&7 sino del len)ua9e est8nder de Internet7 'TML7 pero
como Fstos *an a aperecer muc%as *eces durante el curso7 *amos a dedicar esta al)unas l6neas
a ellos0 Lo #ue *iene a continuacin es 'TML y no &'&0
Todo $ormulario comien4a con la eti#ueta *C4@2 AC6&45=3lo_q!e_sea.php3
27694>=3post/get3'0 Con 0 Con AC6&45 indicamos el script #ue *a procesar la in$ormacin
#ue reco)emos en el $ormulario7 mientras #ue 27694> nos indica si el usuario del $ormulario *a
%a en*iar datos !post" o reco)erlos !get"0 La eti#ueta *C4@2' indica el $inal del $ormulario0
2 partir de la eti#ueta *C4@2' *ienen los campos de entrada de datos #ue pueden ser:
Cuadro de texto)
$inp"t type-"text" name-"nom.re" si&e-"+," val"e-"Dose"%
Cuadro de texto con /arras de desplaamiento)
$textarea rows-"1" name-"descripcion" cols-"+,"%;s de color roDo$/textarea%
Casilla de :eri,icacin)
$inp"t type-"chec/.ox" name-"cam.iar" val"e-"BN"%
$otn de opcin)
$inp"t type-"radio" val"e-"a&"l" chec/ed name-"color"%
Men; desple"a/le)
$select si&e-"(S*" class-"codi)o"%$select si&e-"(" name-"dia"%
$option selected val"e-"l"nes"%l"nes$/option%
$option%martes$/option%
$option val"e-"miercoles"%miercoles$/option%
$/select%
$oton de comando)
$inp"t type-"s".mit" val"e-"enviar" name-"enviar"%
Campo oculto)
$inp"t type-"hidden" name-"edad" val"e-"11"%
5ste Hltimo tipo de campo resulta especialmente Htil cuando #ue remos pasar datos ocultos en
un $ormulario0
Como %abr8s obser*ado todos lo tipos de campo tienen un modicador llamado name7 #ue no es
otro #ue el nombre de la *ariable con la cual reco)eremos los datos en el script indicado por el
modi$icador AC6&45 de la eti#ueta C4@2C4@28 con val!e esta"lecemos !n valor por
de,ecto.
A continuacin :eamos un e8emplo0 para lo cual crearemos un ,ormulario en H(ML
como el 9ue si"ue y lo llamaremos ,ormulario+htm)
*962D'
*E4>F'
*C4@2 27694>=3post3 AC6&45=3mis_datos.php3'
*inp!t type=3hidden3 name=3edad3 val!e=3GG3'
*p'6! nom"re *inp!t type=3text3 name=3nom"re3 siHe=33I3 val!e=3Jose3'*/p'
*p'6! sistema ,avorito
*select siHe=3B3 name=3sistema3'
*option selected val!e=3Din!x3'Din!x*/option'
*option val!e=3Knix3'Knix*/option'
*option val!e=32acintosh3'2acintosh*/option'
*option val!e=?qmargin%le,t: LG3'*option
val!e=3(indo$s3'(indo$s*/option'
*/select'*/p'
*p'M6e g!sta el ,!t"ol + *inp!t type=3checN"ox3 name=3,!t"ol3
val!e=3453'*/p'
*p'MC!al es t! sexo+*/p'
*"locNq!ote'
*p'9om"re*inp!t type=3radio3 val!e=3hom"re3 checNed name=3sexo3'*/p'
*p'2!Jer *inp!t type=3radio3 name=3sexo3 val!e=3m!Jer3'*/p'
*/"locNq!ote'
*p'A,iciones*/p'
*p'*textarea ro$s=3G3 name=3a,iciones3 cols=3OP3'*/textarea'*/p'
*p'*inp!t type=3s!"mit3 val!e=37nviar datos3 name=3enviar3'
*inp!t type=3res%le,t: GI3' *inp!t type=3reset3 val!e=3@esta"lecer3
name=3EO3'*/p'
*/C4@2'
*/E4>F'
*962D'
Y ahora creemos el script PHP llamado desde le ,ormulario mis3datos+php)
*+P9P;
i, -1enviar. Q
echo 39ola *"'3 . 1nom"re . 3*/"' q!e tal estRs*E@'\n3;
echo 37res 3 . 1sexo . 3*E@'\n3;
echo 36ienes 3 . 1edad . 3*E@'\n3;
echo 36! sistema ,avorito es 3 . 1sistema . 3*E@'\n3;
i, -1,!t"ol. Q
echo 36e g!sta el ,!t"ol *E@'\n3;
S else odigo3 style=3margin%le,t: GI3'S else Q
echo 354 te g!sta el ,!t"ol *E@'\n3;
S
i, -1a,iciones == 33. Q
echo 36!s a,iciones son: *E@'\n3;
echo nlO"r-1a,iciones.;
S else Q
echo 354 tienes a,iciones *E@'\n3;
S
S
echo 3*a hre,=<,orm!lario.htm<'T4DT7@ AD C4@2KDA@&4*/a'3
+'
=na :e rellenados los datos del ,ormulario0 pulsamos el /otn *n:iar datos0 con lo
9ue le campo en:iar toma lo 9ue su eti9ueta val!e indica0 es decir en:iarC2*n:iar
datos2+ *n nuestro script lo primero 9ue e:aluamos es 9ue se haya en:iado el
,ormulario0 y para ello nada me8or 9ue compro/ar 9ue la :aria/le 1enviar no est6
:acia+ Le ponemos el si"no dolar delante a en:iar0 ponemos el si"no dolar delante a
en:iar0 ya 9ue en PHP todas las :aria/les se les re,iere con este si"no+
Pero y ,usionaramos el cdi"o de am/os ,ichero0 nos ahorrariamo uno+ Si la :aria/le
1enviar est6 :acia0 en:iamos el ,ormulario+
*+P9P;
i, -1enviar. Q
echo 39ola *"'3 . 1nom"re . 3*/"' q!e tal estRs*E@'\n3;
echo 37res 3 . 1sexo . 3*E@'\n3;
echo 36ienes 3 . 1edad . 3*E@'\n3;
echo 36! sistema ,avorito es 3 . 1sistema . 3*E@'\n3;
i, -1,!t"ol. Q
echo 36e g!sta el ,!t"ol *E@'\n3;
S else Q
echo 354 te g!sta el ,!t"ol *E@'\n3;
S
i, -1a,iciones == 33. Q
echo 36!s a,iciones son: *E@'\n3;
echo nlO"r-1a,iciones.;
S else Q
echo 354 tienes a,iciones *E@'\n3;
S
echo 3*a hre,=<1P9P_)7DC<'T4DT7@ AD C4@2KDA@&4*/a'3

S else Q
*962D'
*E4>F'
*C4@2 27694>=3post3 AC6&45=3*+P9P echo 1P9P_)7DC +'3'
*inp!t type=3hidden3 name=3edad3 val!e=3GG3'
*p'6! nom"re *inp!t type=3text3 name=3nom"re3 siHe=33I3 nom"re3
siHe=33I3 val!e=3Jose3'*/p'
*p'6! sistema ,avorito
*select siHe=3B3 name=3sistema3'
*option selected val!e=3Din!x3'Din!x*/option'
*option val!e=3Knix3'Knix*/option'
*option val!e=32acintosh3'2acintosh*/option'
*option val!e=3(indo$s3'(indo$s*/option'
*/select'*/p'
*p'M6e g!sta el ,!t"ol + *inp!t type=3checN"ox3 name=3,!t"ol3
val!e=3453'*/p'
*p'MC!al es t! sexo+*/p'
*"locNq!ote'
*p'9om"re*inp!t type=3radio3 val!e=3hom"re3 checNed
name=3sexo3'*/p'
*p'=3codigo3 style=3margin%le,t: BII3'*p'2!Jer *inp!t type=3radio3
name=3sexo3 val!e=3m!Jer3'*/p'
*/"locNq!ote'
*p'A,iciones*/p'
*p'*textarea ro$s=3G3 name=3a,iciones3 cols=3OP3'*/textarea'*/p'
*p'*inp!t type=3s!"mit3 val!e=37nviar datos3 name=3enviar3'
*inp!t type=3reset3 val!e=3@esta"lecer3 name=3EO3'*/p'
*/C4@2'
*/E4>F'
*/962D'

*+P9P
S //,in &C
+'
La :aria/le de entorno 1P9P_)7DC0 es una :aria/le de entorno 9ue nos de:uel:e el
nom/re del script 9ue estamos e8ecutando+ Y por ;ltimo0 hacer notar el uso de la
,uncin nlO"r-.0 nlO"r-.0 con la cu6l sustituimos los retornos de carro del texto0 los
cu6les no reconocen los na:e"adores0 por la eti9ueta *E@'+
#escar"a de archi:os
Vamos a *er un caso especial7 como descar)ar un arc%i*o desde un $ormulario0 &ara ello
utili4aremos una eti#ueta &5PK6 de tipo C&D77 soportada a partir de las *ersiones de los
na*e)adores Iestcape Ia*i)ato =0@ e Internet 5xplorer ?0@0
5l $ormulario debe usar el mFtodo post7 y el atributo post8 y el atri"!to enctype de"e
tener el valor m!ltipart/,orm%data. AdemRs al ,orm!lario de"emos aUadirle
!n campo oc!lto de nom"re 2AA_C&D7_)&V78 al c!Rl le daremos el valor en
"yte del tamaUo mRximo del archivo a descargar.
*C4@2 75C6FP7=3m!ltipart/,orm%data3 AC6&45=3L%3.php33 27694>=3post3'
*&5PK6 6FP7=3hidden3 name=32AA_C&D7_)&V73 val!e=3BIIIII3'
*&5PK6 5A27=3archivo3 6FP7=3,ile3'
*&5PK6 6FP7=3s!"mit3 TADK7=3>escargar Archivo3'
*/C4@2'
Cuando el ,ormulario es en:iado0 PHP detectarar6 automaticamente 9ue se est6
descar"ando un archi:o y lo colocar6 en un directorio temporal en el ser:idor+ #icho
directorio ser6 9ue el 9ue est1 indicado en el archi:o de con,i"uracin php-+ini0 o en
su de,ecto en el directorio temporal del sistema+
Cuando PHP dectecta 9ue se est6 descar"ando un archi:o crea :arias :aria/les con el
pre,i8o del nom/re del archi:o pero con distintas terminaciones+ La :aria/le terminada
en _name contiene eli"oenlinea2D3name contiene el nombre ori)inal del arc%i*o7 la terminad
en _siHe el tama3o en bytes de Fste7 y la *ariable terminada en _type nos indicar8 el tipo de
arc%i*o si Fste es o$recido por el na*e)ador0
Si el proceso de descar)a no %a sido correcto la *ariable arc%i*o tomar8 el *alor none y _siHe
ser8 I7 y si el proceso %a sido correcto7 pero la *ariable teminada en _siHe da I7 #uiere decir
#ue el arc%i*o a descar)a supera el tama3o m8ximo indicado por 2AA_C&D7_)&V70
Una *e4 descar)ado el arc%i*o7 lo primero #ue debemos %acer es mo*erlo a otro lu)ar7 pues sino
se %ace nada con Fl7 cuando acabe la e9ecucin de la p8)ina se borrar80
Veamos un e9emplo de todo lo dic%o0
$4T@?%
$MB!V%
$7343
i' 8:enviar9 Ci' 8:enviar9 C
i' 8:archivo X- "none" AN! :archivo2si&e X- ,9C
echo "Nom.re: :archivo2name $M#%\n"<
echo "Tama[o: :archivo2si&e $M#%\n"<
echo "Tipo: :archivo2type $M#%\n"<
/T para \indows
i' 8X copy 8:archivoN "C:\\T;@3\\".:archivo2name99 C
echo "$h+%No se ha podido copiar el archivo$/h+%\n"<
E
T/

/T para ?in"x/Wnix T/
i' 8X copy 8:archivoN "/tmp/".:archivo2name99 C
echo "$h+%No se ha podido copiar el archivo$/h+%\n"<
E

E elsei' 8:archivo X- "none" AN! :archivo2si&e -- ,9 C
echo "$h+%Tama[o de arc't: 01"%echo "$h+%Tama[o de archivo
s"perado$/h+%\n"<
E else C
echo "$h+%No ha esco)ido "n archivo para descar)ar$/h+%\n"<

E
echo "$4#%\n"<
E

7%

$FB#@ ;NCTV3;-"m"ltipart/'ormdata" ACT>BN-"$7php echo :3432S;?F 7%"
@;T4B!-"post"%
$>N3WT type-"hidden" name-"@A]2F>?;2S>^;" val"e-"(,,,,,"%
$p%$.%Archivo a descar)ar$.%$.r%
$>N3WT type-"'ile" name-"archivo" si&e-"31"%$/p%
$p%$>N3WT type-"s".mit" name-"enviar" val"e-"Aceptar"%$/p%
$/FB#@%
$/MB!V%
$/4T@?%
Funciones de acceso a ,icheros
&osiblente durante nuestra tarea de pro)ramacin nos sur)a la necesidad de obtener datos de
un $ic%ero7 o bien7 de crear uno0 &'& nos pro*ee de una extensa )ama de $unciones de acceso a
$ic%eros0
5n esta leccin slo *amos a las $unciones b8sicas7 abrir !$open"7 cerrar !$close"7 leer !$)ets" y
escribir !$puts"0 5stas cuatro nos sol*entaran la mayoria de problemas #ueibir !$puts"0 5stas
cuatro nos sol*entaran la mayoria de problemas #ue nos sur)an con respecto al acceso a
$ic%eros0
,open Harchi:o0 modoI
Con esta $uncin abrimos un $ic%ero7 bien sea local o una direccin de internet !%ttp:// o $tp://"0
La $uncin ,open nos de*uel*e un *alor numFrico !indicador de arc%i*o" de tipo inte"er #ue nos
ser*irar8 para %acer re$erencia al arc%i*o abierto0
Con $open podemos abrir un arc%i*o de los si)uientes modos:
r solo lectura
r: lectura y escritura
$ solo escritura0 Sino existe el arc%i*o lo crea7 si ya existe lo mac%aca0
$: lectura y escritura0 Sino existe el arc%i*o lo crea7 si ya existe lo mac%aca0
a solo lectura0 Sino existe el arc%i*o lo crea7 si ya existe empie4a a escribir al
$inal del arc%i*o0
a: lectura y escritura0 Sino existe el arc%i*o lo crea7 si ya existe empie4a a
escribir al $inal del arc%i*o0
$7343
//a.reo"%$7343
//a.re "n archivo "tili&ando el protocolo 4TT3
i' 8 X 'open8"http://www.ci.era"la.com/"N "r"99 C
echo ";l archivo no se p"ede a.rir\n"<
exit<
E
7%
Los modos r7 r: 7 $ 7 $: colocan el puntero de lectura/escritura a principio del $ic%ero7 los
modos a 7 a: lo colocan al $inal0

,"ets Hindicador3archi:o0 lon"itudI
La $uncin ,"ets nos de*uel*e una cadena con la lon)itud especi$ica del $ic%ero al #ue apunta el
indicador de arc%i*o0
$7343
//a.re "n archivo e imprime cada linea
:archivo - 'open8"dlass-"codi)o"%:archivo - 'open8"data.txt" N "r"9<
i' 8:archivo9 C
while 8X'eo'8:archivo99 C
:linea - ')ets8:archivoN +119<
echo :linea<
E
E
'close 8:archivo9<
7%
La $uncin ,eo, de*uel*e TGU5 si puntero de lectura/escritura se encuetra al $inal del $ic%ero7 y
2LS5 en caso contrario0

,puts Hindicador3archi:o0 cadenaI
La $uncin ,puts escribe una cadena en el $ic%ero indicado0 &ara escribir en una arc%i*o este
debe %aber sido pre*iamente abierto0 La $uncin ,puts de*uel*e TGU5 si se %a escrito con Fxito7
en caso contrario de*uel*e 2LS50
$7343
//a.re "n archivo y escri.e en Ql
:archivo - 'open8"data.txt" N "w"9<
i' 8:archivo9 C
'p"ts 8:archivoN "4ola @"ndo"9<
E
'close 8:archivo9<
7%
R"N
7%

,close Hindicador3archi:oI
Con esta $uncin cerramos el $ic%ero #ue nos marca el indicador de arc%i*o7 de*uel*e TGU5 si el
$ic%ero se cierra correctamente y 2LS5 sino se %a podido cerrar0

,ile3exists H,icheroI
5sta $uncin de*uel*e TGU5 si el arc%i*o especi$icado existe7 y 2LS5 en caso contrario0
$7343
i' 8'ile2exists8"data.txt"99 C
echo ";l 'ichero existe"<
E else C
echo ";l 'ichero NB existe"<
E
7%

copy Hori"en0 destinoI
La $uncin copy copia un $ic%ero de un lu)ar !ori)en" a otro !destino"7 de*uel*e TGU5 si la copia
a tenido Fxito y 2LS5 en caso contrario0
$7343
i' 8copy8"data.txt"N "/tmp/data.txt"99 C
echo ";l 'ichero ha sido copiado con Qxito"<
E else C
echo ";l 'ichero NB se hi)o" style-"mar)inle't: 1,"%echo ";l 'ichero NB
se ha podido copiar"<
E
7%
MySQL
5n esta leccin *amos a %acer un pe#ue3o recorrido por MySQL7 por su estructura y $orma de
traba9ar0 &ara ello suponemos #ue ya %emos conse)uido !por $in000" instalar MyS+L en nuestra
m8#uina0
Lo primiero #ue debemos %acer es arrancar MyS+L !*er capitulo de instalacin":
Linux: ./mysqld start
Windows: mysqld%share$are.exe
Windows: mysqld%share$are.exe
Todo el sistema de permisos de acceso al ser*idor7 a las bases de datos y sus tablas7 MyS+L lo
almacena en una tabla llamada mysql7 #ue como todas estar8 en el directorio <data7 a menos
#ue %allamos especi$icado otro directorio0
5n Windows esta tabla se crea con la instalacin7 pero en Linux/Unix debemos crearla con:
/"sr/local/mys*l/.in/mys*l2install2d.
5n la base de datos mysql es donde se )uadaran todos los permisos y restricciones a los datos
de nuestras bases de datos0 La principal %erramienta de MyS+L es mysqladmin7 la cu8l como
parece indicar su nombre es la encar)ada de la administracin0
MyS+L crea por de$ecto al usuario root con todos los perimsos posibles %abilitados7 podemos
utili4ar este usuario como administrador o crear otro7 por e9emplo mys9ladmi0 Como el usuario
root lo crea sin cla*e de acceso7 lo primero #ue debemos %acer es asi)narle una:
mys*ladmin " root password "miclave"
2 partir de a%ora cual#uier operacin #ue %a)amos como root deberemos especi$ica la cla*e0
'ay #ue destacar #ue enter el modi$icador >p y la cla*e no debe %abe$icador >p y la cla*e no
debe %aber espacios0
mys*ladmin " root pmiclave
&ues bien7 ya estamos preparado para crear una base de datos
mys*ladmin " root pmiclave create mi.asededatos
&ara borrarla
mys*ladmin " root pmiclave drop mi.asededatos
La estructura de MySQL
5n el directorio /benc encontraremos e9emplos de script y S+L0 5n el directoio /s%are est8n los
mensa9es de error del ser*idor para los distinos idiomas0 Los directorios /include y /lib contiene
los $ic%ero X0% y las librerias necesarias7 en /bin estan los $ic%eros e9ecutables y en /data
encontraremos como subdirectorio cada una de las bases de datos #ue %ayamos creado0
Como %emos dic%o7 para cada base de datos #ue nostros creamos7 MyS+L crea un directorio con
el nombre #ue le %emos asi)nado a la bade de datos0 (entro de este directorio7 por cada tabla
#ue de$inamos MyS+L *a %a crear tres arc%i*os: mita/la+IS#0 mita/la+ISM0 mita/la+,rm
5l abla0$rm
5l arc%i*o con extensin IS#7 es el contine los datos de nuestra tabla7 el ISM contiene
in$ormacin acerca de las cla*es y otro datos #ue MyS+L utili4a para buscar datos en el $ic%ero
IS#0 E el arc%i*o ,rm contine la estructura de la propia tabla0
(ado #ue las bases de datos de MyS+L son simples $ic%eros de un directorio7 para reali4ar
copias de se)uridad7 podremos utili4ar las %erramientas de compresin #ue %abitualmente
usamos en nuestro sistema y lue)o copiarlo a otro lu)ar7 o simplemente esto Hltimo0
Se"uridad
Como comentamos anteriormente7 todo el sistema de permisos MyS+L lo )uarda en una base de
datos llamada mysql7 la cu8l se componen de cinco tablas: host0 user0 d/0 ta/les3pri:0
colums3pri:0
La tabla user contiene in$ormacin sobre los usuarios7 desde #ue m8#uinas pueden acceder a
nuestro ser*idor MyS+L7 su cla*e y de sus di$erentes permisos0 La tabla %ost nos in$orma sobre
#ue m8#uinas podran acceder a nuestro sistema7 as6 como a las bases de datos #ue tendr8n
acesso y sus di$erentes permisos0 inalmente7 las tablas d/0 ta/les3pri:0 columns3pri: nos
pro*een de un control indi*idual de las bases de datos7 tablas y columnas !campos"0
Tabla user
CAMP! (IP! P!? #*F*C(!
'ost c%ar!V@"
User c%ar!;V"
&assword c%ar!;V"
Select/pri* enum!TIT7TET" I
Insert/pri* enum!TIT7TET" I
Update/pri* enum!TIT7TET" I
(elete/pri* enum!TIT7TET" I
Create/pri* enum!TIT7TET" I
(rop/pri* enum!TIT7TET" I
Geload/pri* enum!TIT7TET" I
S%utdown/pri* enum!TIT7TET" I
&rocess/pri* enum!TIT7TET" I
ile/pri* enum!TIT7TET" I
Drant/pri* enum!TIT7TET" I
Ge$erences/pri* enum!TIT7TET" I
Index/pri* enum!TIT7TET" I
2lter/pri* enum!TIT7TET" I


Tabla host
CAMP! (IP! P!? #*F*C(!
'ost c%ar!V@"
(b c%ar!<="
Select/pri* enum!TIT7TET" I
Insert/pri* enum!TIT7TET" I
Update/pri* enum!TIT7TET" I
(elete/pri* enum!TIT7TET" I
Create/pri* enum!TIT7TET" I
(rop/pri* enum!TIT7TET" I
Drant/pri* enum!TIT7TET" I
Ge$erences/pri* enum!TIT7TET" I
Index/pri* enum!TIT7TET" I
2lter/pri* enum!TIT7TET" I

Tabla d/
CAMP! (IP! P!? #*F*C(!
'ost c%ar!V@"
(b c%ar!<="
User c%ar!;V"
Select/pri* enum!TIT7TET" I
Insert/pri* enum!TIT7TET" I
Update/pri* enum!TIT7TET" I
(elete/pri* enum!TIT7TET" I
Create/pri* enum!TIT7TET" I
(rop/pri* enum!TIT7TET" I
Ge$erences/pri* enum!TIT7TET" I
Index/pri* enum!TIT7TET" I
2lter/pri* enum!TIT7TET" I

'e a#u6 una bre*e descripcin de los di$erentes permisos:
Select3pri:: &ermite utili4ar la sentencia S5L5CT
Insert3pri:: &ermite utili4ar la sentencia IIS5GT
=pdate3pri:: &ermite utili4ar la sentencia U&(2T5
#elete3pri:: &ermite utili4ar la sentencia (5L5T5
Create3pri:: &ermite utili4ar la sentencia CG52T5 o crear bases de datos
#rop3pri:: &ermite utili4ar la sentencia (GO& o eliminar bases de datos
?eload3pri:: &ermite recar)ar el sistema mediante mysqladmin reload
Shutdo&n3pri:: &ermite parar el ser*idor mediante mysqladminPermite parar el
servidor mediante mysqladmin shutdown
Process_priv: Permite manejar procesos del servidor
File_priv: Permite leer y escribir ficheros usando comando como SELECT IT! !"T#ILE
y L!$% %$T$ I#ILE
Grant_priv: Permite otor&ar permisos a otros usuarios
Index_priv: Permite crear o borrar 'ndices
Alter_priv: Permite utili(ar la sentencia $LTE) T$*LE
Si dejamos en blanco los campos user+ host o db+ haremos referencia a cualquier usario+
servidor o base de datos, Conse&uiremos el mismo efecto poniendo el s'mbolo % en el campo,
Funciones PHP de acceso a MySQL
5n esta leccion *amos a *er todas la $unciones #ue pro*ee &'& para el mane9o de bases de
datos MyS+L0 Los e9emplos del mane9o de las $unciones7 los *eremos a lo lar)o del curso0

mys9l3a,,ected3ro&s
int mys*l2a''ected2rows8int Klin/2identi'ierL 9<
mys#l/a$$ected/rows de*uel*e el nHmero de $ilas a$ectado en el Hltimo S5L5CT7 U&(2T5 o
(5L5T5 pre)unta en el ser*idor asociado con el identi$icador de conexin especi$icado0 Si no se e
especi$ica un identi$icador de conexin7 se asume le de la Hltima conexin abierta0
5ste orden no es e$ica4 para las instrucciones S5L5CT7 slo en instrucciones #ue modi$ican
arc%i*os0 &ara recuperar el nHmero de $ilas *uelto de un S5L5CT7 usa mys#l/num/rows0
mys9l3close
int mys*l2close8int Klin/2identi'ierL 9<
(e*uel*e: TGU5 si se %a cerrado correctamente7 2LS5 en caso de errror0
mys#l/close closes la conexin a la base de datos MyS+L asociada al iden$icador de conexin
especi$icado0 Si no se e especi$ica un identi$icador de conexin7 se asume le de la Hltima
conexin abierta0
Iote #ue esta $uncin no es normalmente necesaria en conexiones no>persistentes !abiertas con
mysl/connect" ya #ue Fst se cerrar8 autom8ticamente al $inal de la e9ecucin del script o p8)ina0
La $uncin mys#l/close no cierra una conecin persistente !abierta con mys#l/pconnect!""0
Ver tambien: mys#l/connect y mys#l/pconnect0
mys9l3connect
int mys*l2connect8strin) KhostnameL N strin) K"sernameL N strin) KpasswordL 9<
(e*uel*e: un identi$icador de conexin7 o 2LS5 en caso de error0
s#l/connect establece una conexin a un ser*idor de MyS+L0 Todos los ar)umentos son
optati*os7 y si no se especi$ican7 los *alores por de$ecto son !T el local%ostT7 nombre del usuario
del usuario #ue posee el proceso del ser*idor7 la contrase3a *ac6a"0 La cadena %ostname tambiFn
puede incluir un nHmero del puerto7 .%ostname:port.0
5n caso de reali4ar una se)unda llamada a mys#l/connect con los mismos ar)umentos7 no se
establecer8 nin)una nue*a conexin7 sino se de*ol*er8 el identi$icador de conexin de la ya
existente0
La conexin al ser*idor se cerrar8 en cuanto la e9ecucin del script acabe7 a menos #ue la
cerremos antes con la $uncin mys#l/close0
Ver tambiFn: mys#l/pconnect y mys#l/close0
mys9l3create3d/
int mys*l2create2d.8strin) data.ase nameN int Klin/2identi'ierL 9<
La $uncin mys#l/create/db intenta crear una nue*a base de datos en el ser*idor asociado con
el identi$icado de conexin especi$icado0
Ver tambiFn: mys#l/drop/db0
mys9l3data3seeL
int mys*l2data2see/8int res"lt2identi'ierN int row2n"m.er9<
(e*uel*e: TGU5 si toda %a ido bien7 y 2LS5 en caso de error0
La $uncin mys#l/data/seeC mue*e el puntero #ue indica la $ila actual al nHmero de $ila de la
consulta #ue indica el identi$icador0 La prxima llamada al mys#l/$etc%/row o mys#l/$etc%/array
de*ol*er6a esa $ila0
Ver tambiFn: mys#l/data/seeC0
mys9l3d/name
strin) mys*l2d.name8strin) res"ltN int i9<
mys#l/dbname de*uel*e el nombre de la base de datos )uardado en posicin i de los resultados
del indicador de consulta de*uelto por la $uncin del mys#l/list/dbs0 La $uncin del
mys#l/num/rows puede usarse para determinar cu8ntos nombres de bases de datos est8n
disponibles0
mys9l3d/39uery
int mys*l2d.2*"ery8strin) data.aseN strin) *"eryN int lin/2identi'ier9<
(e*uel*e: un identi$icador de conexin7 o 2LS5 en caso de error0R de caso en 2LS5 o
conexin71
59ecuta una consulta en una base de datos0 Si el identi$icador no se especi$ica7 la $uncin intenta
encontrar una conexin abierta con el ser*idor0 Si no encuentra una conexin7 intentar8 crear
una !similar a mys#l/connect! " sin ar)umentos"0
See also mys#l/connect0
mys9l3drop3d/
int mys*l2drop2d.8strin) data.ase2nameN int Klin/2identi'ierL 9<
(e*uel*e: TGU5 si toda %a ido bien7 y 2LS5 en caso de error0
5limina una base de datos del ser*idor asociado al identi$icador de conexin0
Ver tambiFn: mys#l/create/db
mys9l3errno
int mys*l2errno89<
(e*uel*e el nHmero de error asociado a la Hltima operacin reali4ada0
Ver tambiFn: mys#l/error
mys9l3error
strin) mys*l2error89<
(e*uel*e el texto asociado al error producido en la Hltima operacin reali4ada por la base de
datos0
RPp%p
mys#l/connect!.marliesle."N
ec%o mys#l/errno!"0.: .0mys#l/error!"0.R,G1.N
mys#l/select/db!.nonexistentdb."N
ec%o mys#l/err/db!.nonexistentdb."N
ec%o mys#l/errno!"0.: .0mys#l/error!"0.R,G1.N
Jconn - mys#l/#uery!.S5L5CT X GOM nonexistenttable."N
ec%o mys#l/errno!"0.: .0mys#l/error!"0.R,G1.N
P1
Ver tambiFn: mys#l/errno
mys9l3,etch3array
array mys*l2'etch2array8int res"lt9<
(e*uel*e un array con la in$ormacin correspondiente al resultado de una consulta especi$icado
por su identi$icador o T$alseT si ya no %ay m8s $ilas0
5s una *ersin extendida de mys#l/$etc%/row ! "0 2dem8s de almacenar los datos a tra*Fs de
6ndices numFricos del array7 tambiFn lo %ace a tra*Fs de 6ndices asociati*os7 utili4ando los
nombres de los campos como cla*es0
Si dos o m8s columnas del resultado tienen el mismo nombre de campo7 la Hltima es la #ue
tiene pre$erencia0 &ara acceder a las dem8s es necesario utili4ar el 6ndice numFrico o construir
un alias para la columna:
select t;0$; as $oo t=0$; as bar $rom t;7 t=
as $oo t=0$; as bar $rom t;7 t=
5sta $uncin no es m8s lenta #ue Tmys#l/$etc%/row! "T0
5xample ;0 mys#l $etc% array
RPp%p
mys#l/connect!J%ost7Juser7Jpassword"N
Jresult - mys#l/db/#uery!.database.7.select X $rom table."N
w%ile!Jrow - mys#l/$etc%/array!Jresult"" Y
ec%o JrowL.user/id.MN
ec%o JrowL.$ullname.MN
Z
mys#l/$ree/result!Jresult"N
P1
mys9l3,etch3,ield
o.Dect mys*l2'etch2'ield8int res"ltN int K'ield2o''setL 9<
(e*uel*e un ob9eto #ue contiene la in$ormacin de los campos #ue componen un resultado de
una consulta0 Si no se especi$ica To$$setT7 de*uel*e in$ormacin sobre el si)uiente campo #ue
toda*6a no %a sido de*uelto0
&ropiedades del ob9eto de*uelto:
name > nombre del campo
table > nombre de la tabla a la #ue pertenece el campo
max/len)t% > lon)itud m8xima #ue puede tomar el campo
not/null > ; si el campo no puede tomar *alores nulos
primary/Cey > ; si el campo es una cla*e principal !primary Cey"
uni#ue/Cey > ; si el campo tiene restriccin de unicidad
multiple/Cey > ; si el campo no tiene rest
multiple/Cey > ; si el campo no tiene restriccin de unicidad
numeric > ; si el campo es numFrico
blob > ; si el campo es ,LO,
type > tipo de dato !del campo"
unsi)ned > ; si el campo es Tunsi)nedT
4ero$ill > ; si el campo es rellenado con ceros
See also mys#l/$ield/seeC
mys9l3,etch3len"ths
int mys*l2'etch2len)ths8int res"lt9<
(e*uel*e: una tabla o 2LS5 si %ay error0
mys#l/$etc%/len)t%s almacena en una tabla la lon)itud de cada campo de una consulta reali4ada
con mys#l/$etc%/row o mys#l/$etc%/array0 5l 6ndice de la tabla comien4a en @0
Ver tambiFn: mys#l/$etc%/row0
mys9l3,etch3o/8ect
int mys*l2'etch2o.Dect8int res"lt9<
(e*uel*e: un ob9eto o 2LS5 en caso de error0
5sta $uncin es similar aTmys#l/$etc%/array7 solo #ue los resultados de una consulta7 en lu)ar de
una tabla7 los de*uel*e como un ob9eto0 5n este caso7 slo se puede acceder a los datos a tra*Fs
de los nombres de sus campos0 La *elocidad de e9ecucin es idFntica a la de Tmys#l/$etc%/array0
&ara re$erenciar el *alor de un campo debemos utili4ar el operador t6picos de los ob9etos !>1"0R
ob9etos los t6picos1
Ver tambiFn: mys#l/$etc%/array and mys#l/$etc%/row0
mys9l3,etch3ro&
array mys*l2'etch2row8int res"lt9<
(e*uel*e: una tabla o 2LS5 si %ay error0
(e*uel*e un tabla con los *alores de los campos de la $ila actual de la cosulta7 la #ue especi$icar
el indicador !result" 7 y mue*e el puntero interno #ue marca la $ila actual a la si)uiente $ila7 si no
%ay mas $ilas de*uel*e 2LS50 5l 6ndice de la tabla comien4a en @0
Ver tambiFn: mys#l/$etc%/array7 mys#l/$etc%/ob9ect7 mys#l/data/seeC7 mys#l/$etc%/len)t%s7
and mys#l/result0
mys9l3,ield3name
strin) mys*l2'ield2name8strin) res"ltN int i9<
(e*uel*e el nombre del campo especi$icado por el 6ndice0
mys9l3,ield3seeL
int mys*l2'ield2see/8int res"ltN int 'ield2o''set9<
Mue*e el puntero del campo actual %acia adelante las posiciones actual %acia adelante las
posiciones indicadas por To$$setT0
Ver tambiFn: mys#l/$etc%/$ield0
mys9l3,ield3ta/le
strin) mys*l2'ield2ta.le8int res"ltN int 'ield2o''set9<
(e*uel*e el nombre de la tabla #ue almacena el campo especi$icado por el 6ndice
! T$ield/o$$setT "0
mys9l3,ield3type
strin) mys*l2'ield2type8strin) res"ltN int 'ield2o''set9<
(e*uel*e el tipo del campo del indice especi$icado0
mys9l3,ield3,la"s
strin) mys*l2'ield2'la)s8strin) res"ltN int 'ield2o''set9<
(e*uel*e los especi$icadores !$la)s" del campo especi$icado como una cadena de texto en la #ue
cada especi$icador se corresponde con una palabra7 y Fstas *an separadas mediante un espacio
simple0 Se puede anali4ar la cadena utili4ando explode! "
Los especi$icadores son:
.not/null.7 .primary/Cey.7 .uni#ue/Cey.7 .multiple/Cey.7 .blob.7 .unsi)ned.7 .4ero$ill.7 .binary.7
.enum.7 .auto/increment.7 .timestamp.0
mys9l3,ield3len
int mys*l2'ield2len8strin) res"ltN int 'ield2o''set9<
(e*uel*e la lon)itud del campo especi$icado
mys9l3,ree3result
int mys*l2'ree2res"lt8int res"lt9<
Slo deber6a ser utili4ada si la cantidad de memoria utili4ada para almacenar el resultado de una
consulta es muy )rande0 Cuando se e9ecuta esta $uncin7 toda la memoria asociada al resultado
se libera0
mys9l3insert3id
int mys*l2insert2id8void9<
5sta $uncin de*uel*e el I( !identi$icador" )enerado para los campos autonumFricos
!2UTO/IICG5M5IT5("0 5l I( de*uelto es el correspondiente al de la Hltima operacin IIS5GT0
mys9l3list3,ields
int mys*l2list2'ields8strin) data.aseN strin) ta.lename9<
(e*uel*e in$ormacin sobre la tabla0 5l *alor resultante puede ser utili4ado con
mys#l/$ield/$la)s!"7 mys#l/$ield/len!"7 mys#l/$ield/name!"7 and mys#l/$ield/type!"0
5l identi$icador #ue de*uel*e es un entero positi*o o T>;T en caso de error0 5l texto #ue describe
el error se encuentra en Jp%perrms)0
mys9l3list3d/s
int mys*l2listd.s8void9<
(e*uel*e un puntero #ue contiene las bases de datos disponibles para el ser*idor actual !ms#l
daemon"0 5ste *alor se utili4a con la $uncin mys#l/dbname! "0
mys9l3list3ta/les
int mys*l2list2ta.les8strin) data.aseN N int Klin/2identi'ierL9<
(e*uel*e un identi$icar7 el cual pasaremos a la $uncin mys#l/tablename para extraer el nombre
de las tablas de la base de datos especi$icada0
mys9l3num3,ields
int mys*l2n"m2'ields8int res"lt9<
mys#l/num/$ields de*uel*e en nHmero de campos de una consulta0
Ver tambiFn: mys#l/db/#uery7 mys#l/#uery7 mys#l/$etc%/$ield7 mys#l/num/rows0
mys9l3num3ro&s
int mys*l2n"m2rows8strin) res"lt9<
(e*uel*e el nHmero de $ilas del resultado de una consulta0
Ver tambiFn: mys#l/db/#uery7 mys#l/#uery and7 mys#l/$etc%/row0#uery7 mys#l/#uery and7
mys#l/$etc%/row0
mys9l3pconnect
int mys*l2pconnect8strin) KhostnameL N strin) K"sernameL N strin)
KpasswordL 9<
(e*uel*e: 2 positi*e MyS+L persistent linC identi$ier on success7 or $alse on error
(e*uel*e un identi$icador de conexin persistente o T$alseT en caso de error0 Las di$erencias con
respecto a mys#l/connect! " son:
&rimero7 la $uncin intenta encontrar una conexin persistente #ue ya estF abierta con la
misma m8#uina7 usuario y password0 Si es encontrada7 de*uel*e el identi$icador de la
misma7 en lu)ar de crear una nue*a conexin0
Se)undo7 la conexin al ser*idor S+L no ser8 cerrada cuando $inalice la e9ecucin del
script7 sino #ue permanece abierta para un uso posterior0
La $uncin mys#l/close no cierra una coneccin abierta con mys#l/pconnect0 Las conecciones
abierta con esta $uncin se llaman .persistentes.0
mys9l39uery
int mys*l2*"ery8strin) *"eryN int Klin/2identi'ierL 9<
59ecuta una consulta a la base de datos acti*a en el ser*idor asociado al identi$icador de
conexin0 Si no se especi$ica7 se utili4a la Hltima conexin abierta0$ica7 se utili4a la Hltima
conexin abierta0 Si no %ay conexiones abiertas la $uncin intenta establecer una0
5sta $uncin de*uel*e TGU5 o 2LS5 para indicar si las operaciones U&(2T57 IIS5GT o (5L5T5
%an tenido Fxito0 &ara la operacin S5L5CT de*uel*e un nue*o identi$icador de resultado0
Ver tambiFn: mys#l/db/#uery7 mys#l/select/db7 and mys#l/connect0
mys9l3result
int mys*l2res"lt8int res"ltN int rowN mixed 'ield9<
(e*uel*e el contenido de la celda de un resultado0 5l ar)umento T$ieldT puede ser un 6ndice o el
nombre del campo correspondiente o el nombre del campo de la $orma: tabla0campo0 Si la
columna tiene un alias !Tselect $oo as bar $rom000T" se utili4a el alias en lu)ar del nombre de la
columna0
5n lu)ar de esta $uncin es pre$erible usar mys#l/$etc%/row!"7 mys#l/$etc%/array!"7 and
mys#l/$etc%/ob9ect!"7 con la #ue obtendremos me9or rendimiento0
mys9l3select3d/
int mys*l2select2d.8strin) data.ase2nameN int Klin/2identi'ierL 9<
(e*uel*e: true on success7 $alse on error
5stablece la base de datos acti*a en el ser*idor0 Si no se especi$ica identi$icador de conexin se
utili4a la Hltima conexin abierta0 Si no %ay conexiones anexin abierta0 Si no %ay conexiones
acti*as7 la $uncin intenta establecer una0 2 partir de la llamada a mys#l/select/db las llamadas
a mys#l/#uery! " actHan sobre la nue*a base de datos acti*a0
Ver tambiFn: mys#l/connect7 mys#l/pconnect7 and mys#l/#uery
mys9l3ta/lename
strin) mys*l2ta.lename8int res"ltN int i9<
Toma como ar)umento un puntero de*uelto por la $uncin mys#l/list/tables! " y de*uel*e el
nombre de la tabla asociada al indice i0 La $uncin mys#l/num/rows! " puede ser utili4ada para
determinar el nHmero de tablas0
$7php
mys*l2connect 8"localhost:33,P"9<
:res"lt - mys*l2listta.les 8".asededatos"9<
:i - ,<
while 8:i $ mys*l2n"m2rows 8:res"lt99 C
:t.2namesK:iL - mys*l2ta.lename 8:res"ltN :i9<
echo :t.2namesK:iL . "$M#%"<
:iJJ<
E
7%
Conectar a MySQL desde PHP
Conectar a MyS+L desde &'&
Ea tenemos datos en nuestra ,ase de (atos !,("7 as6 #ue con el si)uiente script nos
conectaremos a la ,( del ser*idor MySQL para obtener los datos de un re)istro0
Conexin a MyS+L
$html%
$.ody%
$7php
:lin/p%
$7php
:lin/ - mys*l2connect8"localhost"N "no.ody"9<
mys*l2select2d.8"myd."N :lin/9<
:res"lt - mys*l2*"ery8"S;?;CT T F#B@ a)enda"N :lin/9<
echo "Nom.re: ".mys*l2res"lt8:res"ltN ,N "nom.re"9."$.r%"<
echo "!irecci6n: ".mys*l2res"lt8:res"ltN ,N "direccion"9."$.r%"<
echo "TelQ'ono :".mys*l2res"lt8:res"ltN ,N "tele'ono"9."$.r%"<
echo ";@ail :".mys*l2res"lt8:res"ltN ,N "email"9."$.r%"<
7%
$/.ody%
$/html%
5n la primera l6nea del script nos encontramos con la $uncin mysql_connect-.7 #ue abre una
conexin con el ser*idor MyS+L en el Host especi$icado !en este caso la misma m8#uina en la
#ue est8 alo9ada el ser*idor MyS+L7 localhost"0 TambiFn debemos especi$icar un usuario
!nobody7 root7 etc0 "7 y si $uera necesario un password para el usuario indicado
-mysql_connect-3localhost38 3root38 3clave_del_root3..0 Si la conexin %a tenido
Fxito7 la $uncin mysql_connect-. de*uel*e un identi$icar de dic%a conexin !un nHmero" #ue
es almacenado en la *ariable 1linN7 sino %a tenido Fxito7 de*uel*e A !2LS5"0
Con mysql_select_d"-. &'& le dice al ser*idor #ue en la conexin 1linN nos #ueremos
conectar a la base de datos myd"0 &odr6amos establecer distintas conexiones a la ,( en
di$erentes ser*idores7 pero nos con$ormaremos con una0
La si)uiente $uncin mysql_q!ery-.7 es la #ue %ace el traba9o duro7 usando el identi$icador de
la conexin !1linN"7 en*6a una instruccin S+L al ser*idor MyS+L para #ue Fste la procese0 5l
resultado de Fsta operacin es almacenado en la *ariable 1res!lt0
inalmente7 mysql_res!lt-. es usado para mostrar los *alores de los campos de*ueltos por la
consulta !1res!lt"0 5n este e9emplo mostramos los *alores del re)istro @7 #ue es el primer
re)istro @7 #ue es el primer re)istro7 y mostramos el *alor de los campos especi$icados0
Creacin de una $ase de #atos en MySQL
2ntes de se)uir con PHP7 *amos a preparar la base de datos !,(" #ue *amos a utili4ar como
e9emplo0 Como ser*idor de ,(7 usaremos MySQL un pe#ue3o y compacto ser*idor de ,(7 ideal
para pe#ue3as y medianas aplicaciones0 MySQL soporta el est8ndar SQL !2ISI"7 y adem8s est8
disponible para distintas plata$ormas7 incluido las .windows.disponible para distintas
plata$ormas7 incluido las .windows.0
Una *e4 instalado MySQL7 *amos a crear nuestra ,( e9emplo0 MySQL utili4a una tabla de
permisos de usuarios7 por de$ecto7 en la instalacin crea el usuario root sin password0 (ebes
crear distintos usuarios con distintos permisos0 5ntre ellos7 el usuario administrador de MySQL7
con todos los permisos7 y como recomendacin de se)uridad7 el usuario no/ody slo con el
permiso de consultar !)7D7C6"7 #ue es el #ue utili4aremos para conectarnos al ser*idor de ,(
en nuestros script0
Vamos a *er dos $ormas de crear una base de datos y sus tablas0 &ara ello *amos a crear la base
de datos #ue nos ser*ir8 de e9emplo en capitulos si)uientes:

@+ Linea de comandos
&ara crear nuestra base de datos en sistemas Linux/Unix7 debemos ser el administrador de
MySQL o tener el permiso pertinente para crear bases de datos7 para ello %aremos lo si)uiente:
mys*ladmin create myd.
Ea %emos creado una ,(7 a%ora le a3adiremos una tabla y al)unos re)istros7 para lo cual copia
el si)uiente texto y s8l*alo en un arc%i*o7 #ue podr6amos llamar myd/+dump0
Crear ta/la my/d
C#;AT; TAM?; a)enda 8id >NT NBT NW?? AWTB2>NC#;@;NTN nom.re C4A#81,9Ndireccion
C4A#8(,,9N tele'ono C4A#8(19N email C4A#81,9N _;V 8id9 9\)
>NS;#T >NTB a)enda =A?W;S 8,N `H"an 3Qre&`N `C/ ?a)"naN (1. Sevilla`N
`R1.511.11.11`N `D"anYa)enda.com` 9\)
>NS;#T >NTB a)enda =A?W;S 8(N `?"is aarcIa`N `C/ MetisN ++. CAdi&`N
`R1.P11.PP.33`N `l"isYa)enda.com` 9\)
>NS;#T >NTB a)enda =A?W;S 8+N `Carlos #odrI)"e&`N `C/ SevillaN P. 4"elva`N
`R1.((3.++.00`N `carlosYa)enda.com` 9\)
(ebemos tener en cuenta #ue los comandos de arriba debe escribirse cada uno en una sola
l6nea0 Se %an separado para aumentar la le)ibilidad del cdi)o0
2%ora desde la l6nea de comandos e9ecuta:
cat myd..d"mp b mys*l myd.
Cabe destacar el campo id7 #ue no puede estar *ac6o7 y adem8s es autoincrementable7 lo cu8l
deberemos tener en cuenta a la %ora de actuali4ar y a3adir re)istros0 Si no %emos cometido
nin)Hn error7 ya tenemos nuestra base de datos de e9emplo en el ser*idor MySQL0
MySQL0

M+ Script
Una se)una $orma de crear las bases de datos y tablas es utili4ar las $unciones #ue para ello nos
da &'&0 &ara crear una base de datos tenemos dos opciones7 una utili4ar la $uncin
mysql_create_d"-.7 o bien en*iado una consulta S+L con la intruccin .C@7A67 >A6AEA)7
myd".0 Como e9emplo *amos a crear un script crear3my+php #ue crear8 la anterio base de
datos0
$html%
$.ody%
$7343
de'ine 8"CBNSTANT;"N "4ola @"ndo"9<
print' 8CBNSTANT;9<
7%
$/.ody%
$/html%
:.asedatos - "myd."<
//conectamos con el servidor
:lin/ - Ymys*l2connect8"localhost"N "root"N ""9<

// compro.amos *"e hemos esta.ecido conexi6n en el servidor
i' 8X :lin/9C
echo "$h+ ali)n-`center`%;##B#: >mposi.le esta.lecer conecci6n con el
servidor$/h+%"<
exit<
E
// o.tenemos "na lista de las .ases de datos del servidor
:d. - mys*l2list2d.s89<

// vemos c"antas M! hay
:n"m2.d - mys*l2n"m2rows8:d.9<

//compro.amos si la M! *"e *"ermos crear exite ya
:existe - "NB" <
'or 8:i-,< :i$:n"m2.d< :iJJ9 C
i' 8mys*l2d.name8:d.N :i9 -- :.asedatos9 C
:existe - "S>" <
.rea/<
E
E

// si no existe la creamos
i' 8:existe -- "NB"9 C
/T manera ( T/
i' 8X mys*l2create2d.8:.asedatosN :lin/99 C
echo "$h+ ali)n-`center`%;##B# (: >mposi.le crear .ase de datos$/h+%"<
exit<
E
/T class-"codi)o" style-"mar)inle't: 1,"% /T manera +
i' 8X mys*l2*"ery8"C#;AT; !ATAMAS; :.asedatos"N :lin/99C
echo "$h+ ali)n-`center`%;##B#+: >mposi.le crear .ase de datos$/h+%"<
exit<
E T/
E

// craamos la ta.la
:s*l - "C#;AT; TAM?; a)enda 8"<
:s*l .- "id >NT NBT NW?? AWTB2>NC#;@;NTN "<
:s*l .- "nom.re C4A#81,9N "<
:s*l .- "direccion C4A#8(,,9N "<
:s*l .- "tele'ono C4A#8(19N "<
:s*l .- "email C4A#81,9N "<
:s*l .- "_;V 8id9 9 "<

i' 8Ymys*l2d.2*"ery8:.asedatosN :s*lN :lin/99 C
echo "$h+ ali)n-`center`%?a ta.la se ha creado con Qxito$/h+%"<
E else C
echo "$h+ ali)n-`center`%No se ha podido crear la ta.la$/h+%"<
E

7%

$/.ody%
$/html%
Importar /ases de datos desde MS Access
Un caso muy comHn7 como en mi caso7 al comen4ar a utili4ar MyS+L7 necesitaba mi)rar mis
bases de datos 2ccess de mi sistemas Windows a MyS+L en Linux0 La solucin a este problema7
nos la aporta un mdulo creado por &edro reire de CEI5GDI0
Los pasos #ue debemos se)uir para instalar este mdulo7 y su posterior uso son:
;0 2bre el arc%i*o de 2ccess +md/ #ue deseas exportar0
=0 5n la *entana de ob9etos de la ,( selecciona .Mdulos.7 y despuFs en .'ue:o.0
<0 5ntonces se te abrir8 una *entana nue*a7 borra todo texto !cdi)o" #ue %aya escrito0
?0 Copia todo el texto del arc%i*o de &edro reire y pF)alo en el nue*o mdulo0
W0 Cierra la *entana de cdi)o del mdulo7 selecciona #ue .S5. desea )uardar los cambios y
nombra el mdulo !p0e0 .MexportS+L."0 5l mdulo es a%ora parte de tu base de datos
2ccess0
V0 Vuel*e a abrir el mdulo7 o pinc%a con el ratn en .#ise4o. con nuestro nue*o mdulo
seleccionado0 Mue*e el cursor %asta donde apare4ca la primera palabra .Function.7 y
presiona W o selecciona .*8ecutar. en el menH0
La e9ecucin del mdulo nos crear8 dos arc%i*os !es#l/add0txt y es#l/del0txt" en el directorio
C:/temp !el #ue trae por de$ecto7 pero lo podemos cambiar"0 2 nosotros el arc%i*o #ue nos
interesa es es9l3add+txt7 el cu8l como me9or nos pare4ca deberemos lle*8rnoslo a nuestra
m8#uinae4ca deberemos lle*8rnoslo a nuestra m8#uina Linux0
2%ora solo tenemos #ue se)uir los paso #ue explicamos en el cap6tulo anterior !Comen4ando con
MyS+L"0 &rimero creamos la base de datos:
mys*ladmin create my.d
E despuFs *olcamos los datos y en la nue*a base de datos:
cat es*l2add.txt b mys*l my.d
Mostrar los datos de una consulta
Mostrar los datos de una consulta
2%ora #ue ya sabemos conectar con el ser*idor de ,(7 *eremos como mostrar los datos por
pantalla0
Consulta de la ,(
$html%
$.ody%
$7php
:lin/ - mys*l2connect8"localhost"N "no.ody"odi)o"%:lin/ -
mys*l2connect8"localhost"N "no.ody"9<
mys*l2select2d.8"myd."N :lin/9<
:res"lt - mys*l2*"ery8"S;?;CT nom.reN email F#B@ a)enda"N :lin/9<
echo "$ta.le .order - `(`% \n"<
echo "$tr% \n"<
echo "$td%$.%Nom.re$/.%$/td% \n"<
echo "$td%$.%;@ail$/.%$/td% \n"<
echo "$/tr% \n"<
while 8:row - mys*l2'etch2row8:res"lt99C
echo "$tr% \n"<
echo "$td%:rowK,L$/td% \n"<
echo "$td%:rowK(L$/td% \n"<
echo "$/tr% \n"<
E
echo "$/ta.le% \n"<
7%
$/.ody%
$/html%
5n este script %emos introducido dos no*edades7 la m8s ob*ia es la sentencia de control
$hile-.8 q!e tiene !n ,!ncionamiento similar al de otros leng!aJes8
eJec!ta !na cosa mientras la condici#n sea verdadera. 7n esta ocasi#n
$hile-. evalWa la ,!nci#n mysql_,etch_ro$-.8 q!e dev!elve !n array con el
contenido del registro act!al -q!e se almacena en 1ro$. y avanHa !na
posici#n en la lista de registros dev!eltos en la cons!lta )XD.
La ,uncin mysql_,etch_ro$-. tiene un pe9ue4o pro/lema0 es 9ue el array 9ue
de:uel:e slo admite re,erencias num1ricas a los campos o/tenidos de la consulta+ *l
primer campo re,erenciado es el A0 el se"undo el @ y as5 sucesi:amente+ *n el si"uiente
script solucionaremos este pe9ue4o incon:eniente+
Consulta modi,icada de $#
*html'
*"ody'
*+php
1linN = mysql_connect-3localhost38 3no"ody?ost38 3no"ody3.;
mysql_select_d"-3myd"38 1linN.;
1res!lt = mysql_q!ery-3)7D7C6 nom"re8 email C@42 agenda38 1linN.;
i, -1ro$ = mysql_,etch_array-1res!lt..Q
echo 3*ta"le "order = <B<' \n3;
echo 3*tr' \n3;
echo 3*td'*"'5om"re*/"'*/td' \n3;
echo 3*td'*"'7%2ail*/"'*/td' \n3;
echo 3*/tr' \n3;
do Q
echo 3*tr' \n3;
echo 3*td'3.1ro$Y3nom"re3Z.3*/td' \n3;
echo 3*td'3.1ro$Y3email3Z.3*/td'\n3;
echo 3*/tr' \n3;
S $hile -1ro$ = mysql_,etch_array-1res!lt..;
echo 3*/ta"le' style=3margin%le,t: GI3'echo 3*/ta"le' \n3;
S else Q
echo 3[ Da "ase de datos estR vacia =3;
S
+'
*/"ody'
*/html'
*sencialmente0 este script hace lo mismo 9ue el anterior+ Almacenamos en 1ro$ el
re"istro actual con la ,uncin mysql_,etch_array-. 9ue hace exactamente lo mismo
9ue mysql_,etch_ro$-.0 con la excepcin 9ue podemos re,erenciar a los campos por
su nom/re H1ro$Y3email3ZI0 en :e de por un n;mero+
Con la sentencia i,/else0 asi"namos a Ero& el primer re"istro de la consulta0 y en
caso de no ha/er nin"uno HelseI mostramos un mensa8e H2'o se ha encontrado+++2I+
Mientras 9ue con la sentencia do/$hile0 nos ase"uramos 9ue se nos muestren todos
los re"istros de:ueltos por la consulta en caso de ha/er m6s de uno+
Hay 9ue destacar la utiliacin del punto H.I0 como operador para concatenar cadenas+
=n /uscador para nuestra /ase de datos
Vamos a *er una aplicacin7 un e9emplo7 de todo lo *isto %asta a%ora0 5scribiremos un script #ue
sir*a para buscar una determinada cadena !#ue recibiremos de un $ormulario7 y la almacenamos
en la *ariable 1"!scar"7 dentro de nuestra base de datos7 concretamente dentro del campo
.nombre.0
campo .nombre.0
5n primer lu)ar escribiremos el texto 'TML de la p8)ina web #ue nos ser*ir8 como $ormulario de
entrada7 la llamaremos $ormulario0%tm0
ormulario entrada
$html%
$.ody%
$'orm method - "3BST" action - "http://mysevidor/php/."scador.php3"%
$stron)%3ala.ra clave:$/stron)%
$inp"t type-"text" name-"."scar" si&e-"+,"%$.r%$.r%
$inp"t type-"s".mit" val"e-"M"scar"%
$/'orm%
$/.ody%
$/html%
5l si)uiente script de bus#ueda lo llamaremos /uscador+php-7 y ser8 el encar)ado de %acer la
bHs#ueda en la ,(7 y de*ol*er por pantalla los re)istros encontrados0
Script bHs#ueda
$html%
$.ody%
$7php
i' 8Xisset8:."scar99C
echo "!e.e especi'icar "na cadena a ."scar"<
echo S*"o
echo "$p%!e.e especi'icar "na cadena a ."scar$/p% \n"<
echo "$p%$a hre'-."scador2.d.htm%=olver$/p% \n"<
echo "$/html%$/.ody% \n"<
exit<
E
:lin/ - mys*l2connect8"localhost"N "no.ody"9<
mys*l2select2d.8"myd."N :lin/9<
:s*l - "S;?;CT T F#B@ a)enda \4;#; nom.re ?>_; `c:."scarc` B#!;# MV nom.re"<
:res"lt - mys*l2*"ery8:s*lN :lin/9<
i' 8:row - mys*l2'etch2array8:res"lt99C
echo "$ta.le .order - `(`% \n"<
//@ostramos los nom.res de las ta.las
echo "$tr% \ndi)o" style-"mar)inle't: 1,"%echo "$tr% \n"<
mys*l2'ield2see/8:res"ltN,9<
while 8:'ield - mys*l2'etch2'ield8:res"lt99C
echo "$td%$.%:'ield%name$/.%$/td% \n"<
E
echo "$/tr% \n"<
do C
echo "$tr% \n"<
echo "$td%".:rowK"id"L."$/td% \n"<
echo "$td%".:rowK"nom.re"L."$/td% \n"<
echo "$td%".:rowK"direccion"L."$/td% \n"<
echo "$td%".:rowK"tele'ono"L."$/td% \n"<
echo "$td%$a
hre'-`mailto:"
hre'-`mailto:".:rowK"email"L."`%".
:rowK"email"L."$/a%$/td% \n"<
echo "$/tr% \n"<
E while 8:row - mys*l2'etch2array8:res"lt99<
echo "$p%$a hre'-."scador2.d.htm%=olver$/p% \n"<
echo "$/ta.le% \n"<
E else C
echo "$p%dNo se ha encontrado nin)Gn re)istroX$/p%\n"<
echo "$p%$a hre'-."scador2.d.htm%=olver$/p% \n"<
E
7%
$/.ody%
$/html%
Lo primero #ue comprobamos es #ue el contenido de la *ariable 1"!scar #ue recibimos del la
p8)ina web ,ormulario+htm no es una cadena *acia7 y esto lo %acemos con la $uncin isset-.
#ue de*uel*e T,alsoT si la *ariable #ue recibe est8 *acia0 2 la $uncin le anteponemos el si"no
admiracin !=" #ue es e#ui*alente a un 5467 para con*ertirlo en T:erdaderoT en caso de #ue la
*ariable estF *acia7 y en es caso terminamos la e9ecucin del script con exit0
Lo m8s importante de este script7 es sin duda la sentencia S+L #ue le en*iamos al ser*idor
MyS+L7 y m8s concretamente la condicin #ue le imponemos7 (97@7 nom"re D&\7 <;
1"!scar;<0 Con la sentencia D&\7 buscamos cual#uier ocurrencia de la cadena contenida en
1"!scar7 mientras #ue con los si)nos de porcenta9e !;" indicamos el lu)ar de la coincidencia7
por e9emplo7 si %ubiesemos puesto nom"re D&\7 <;1"!scar<7 buscariamos cual#uier
ocurrencia al $inal del campo.nombre.7 mientras #ue si %ubiesemos puesto nom"re D&\7
<1"!scar;<7 buscariamos cual#uier ocurrencia al principio del campo .nombre.0
Las Hltimas no*edade #ue %emos incorporado7 son las $uncines mysql_,etch_,ield-.7 con
el #ue obtenemos in$ormacin acerca de las caracter6ticas de cada campo7 como su nombre7
tipo7 lon)itud7 nombre de la tabla #ue los contiene7 etc0 &ero para e9ecutar la $uncin anterior
debemos colocar el puntero en el primer campo7 y eso lo lo)ramos con la $uncin
mysql_,ield_seeN-.7 la c8l mue*e el puntero interno a la posicin indicada0
A4adir re"istros
5n esta leccin *amos *er como podemos a3adir nue*os re)istros a nuesta ,(0 La reco)ida de
datos la *amos a %acer a tra*es de un inter$a4 de web0 5n primer lu)ar *amos a crear una
p8)ina web con un simple $ormulario7 con los campos #ue deseamos0
ormulario inicial a3adir ,(
$html%
$.ody%
$'orm method-"poodi)o"%$.ody%
$'orm method-"post" action-"add2re).php3"%
Nom.re :$inp"t type-"Text" name-"nom.re"%$.r%
!irecci6n:$inp"t type-"Text" name-"direccion"%$.r%
TelQ'ono :$inp"t type-"Text" name-"tele'ono"%$.r%
;mail :$inp"t type-"Text" name-"email"%$.r%
$inp"t type-"S".mit" name-"enviar" val"e-"Aceptar in'ormaci6n"%
$/'orm%
$/.ody%
$/html%
'emos creado un $ormulario donde reco)er los datos7 y una *e4 introducidos e9ecutamos un
script llamado add3re"+php-7 pues *eamos como es este script0
a3adir re)istros
$html%
$.ody%
$7php
// process 'orm
:lin/ - mys*l2connect8"localhost"N "root"9<
mys*l2select2d.8"myd."N:d.9<
:s*l - ">NS;#T >NTB a)enda 8nom.reN direccionN tele'onoN emT >NTB a)enda
8nom.reN direccionN tele'onoN email9 "<
:s*l .- "=A?W;S 8`:nom.re`N `:direccion`N `:tele'ono`N `:email`9"<
:res"lt - mys*l2*"ery8:s*l9<
echo "daraciasX 4emos reci.ido s"s datos.\n"<
$/.ody%
$/html%
Como se puede *er7 para introducir un nue*o re)istro7 utili4amos la ya conocida $uncin
mysql_q!ery-.7 la cHal tambiFn usamos para las consultas7 y usaremos para las
actuali4aciones7 es decir una se3ora $uncin0 [2aa%\7 una cosa muy importante7 para poder
a3adir o modi$icar re)istros debemos tener permiso para ello en el ser*idor MyS+L7 por eso en
este caso me conecto como root7 pero podr6a ser cual#uier otro usuario0
&ara terminar esta leccin7 una pe#ue3a $ri*olidad7 *amos a combinar la p8)ina web de
$ormulario y el $ic%ero de script p%p<7 en un solo $ic%ero #ue llamaremos add3re"+php- !este
script no lo comentarF7 \al)o tendran #ue %acer ustedes[o tendran #ue %acer ustedes["0
Combinacion de $ormulario y script
$html%
$.ody%
$7php
i' 8:enviar9 C
// process 'orm
:lin/ - mys*l2connect8"localhost"N "root"9<
mys*l2select2d.8"myd."N:d.9<
:s*l - ">NS;#T >NTB a)enda 8nom.reN direccionN tele'onoN email9 "<
:s*l .- "=A?W;S 8`:nom.re`N `:direccion`N `:tele'ono`N `:email`9"<
:res"lt - mys*l2*"ery8:s*l9<
echo "daraciasX 4emos reci.ido s"s datos.\n"<
EelseC
7%
$'orm method-"post" action-"add2re).php3"%
Nom.re :$inp"t type-"Text" name-"nom.re"%$.r%
!irecci6n:$inp"t type-"TextS*"o%!irecci6n:$inp"t type-"Text"
name-"direccion"%$.r%
TelQ'ono :$inp"t type-"Text" name-"tele'ono"%$.r%
;mail :$inp"t type-"Text" name-"email"%$.r%
$inp"t type-"S".mit" name-"enviar" val"e-"Aceptar in'ormaci6n"%
$/'orm%
$7php
E //end i'
7%
$/.ody%
$/html%
Modi,icar re"istros en MySQL
&rimero7 para modi$icar %ay #ue tener permiso para ello en el ser*idor de ,(7 el resto nos *iene
de corrido0 &rimero seleccionamos el re)istro #ue deseamos modi$icar7 y lue)o7 mandamos una
consulta con la modi$icaciones7 o ambas cosas a la *e40 Suponemos #ue las modi$icaciones las
reco)emos de un $ormulario como el de la leccin anterior 0
Modi$icar re)istros opcion A
$html%
$.ody%
$7php
i' 8isset8:id99C
// process 'orm
:lin/ - mys*l2connect8"localhost"N "root"9<
mys*l2select2d.8"myd."N:d.9<
:s*l - "S;?;CT T F#B@ a)enda \4;#; id - :id"
:res"lt - mys*l2*"ery8:s*l9<
:s*l - "W3!AT; a)enda S;T nom.re-`:nom.re`N
direccion-`:direccion`N tele'ono-`:tele'ono`N email-`:email`"<
:res"lt - mys*l2*"ery8:s*l9<
EelseC
echo "!e.e especi'icar "n `id`.\n"<
E
$/.ody%
$/html%
O bien7 Modi$icar re)istros opcion $
$html%
$.ody%
$7php
i' 8icodi)o"%$7php
i' 8isset8:id99C
// process 'orm
:lin/ - mys*l2connect8"localhost"N "root"9<
mys*l2select2d.8"myd."N:d.9<
:s*l - "W3!AT; a)enda S;T nom.re-`:nom.re`N direccion-`:direccion`N "<
:s*l .- "tele'ono-`:tele'ono`N email-`:email` \4;#; id-:id"<
:res"lt - mys*l2*"ery8:s*l9<
EelseC
echo "!e.e especi'icar "n `id`.\n"<
E
7%
$/.ody%
$/html%
$orrar re"istros
5l proceso de borrar un re)istro es identico al de modi$icar7 solo #ue en *e4 de utili4ar KP>A67
utili4amos >7D767 en la sentenica SQL0 &or tanto el script #uedar6a como si)ue0
,orrado re)istros de ,(
$html%
$.ody%
$7php
Rbody1
$7php
i' 8isset8:id99C
// process 'orm
:lin/ - mys*l2connect8"localhost"N "root"9<
mys*l2select2d.8"myd."N:d.9<
:s*l - "!;?;T; F#B@ a)enda \4;#; id-:id"9
:res"lt - mys*l2*"ery8:s*l9<
EelseC
echo "!e.e especi'icar "n `id`.\n"<
E
7%
$/.ody%
$/html%
$orrar re"istros
5l proceso de borrar un re)istro es identico al de modi$icar7 solo #ue en *e4 de utili4ar KP>A67
utili4amos >7D767 en la sentenica SQL0 &or tanto el script #uedar6a como si)ue0
,orrado re)istros de ,(
$html%
$.ody%
$7php
Rbody1
$7php
i' 8isset8:id99C
// process 'orm
:lin/ - mys*l2connect8"localhost"N "root"9<
mys*l2select2d.8"myd."N:d.9<
:s*l - "!;?;T; F#B@ a)enda \4;#; id-:id"9
:res"lt - mys*l2*"ery8:s*l9<
EelseC
echo "!e.e especi'icar "n `id`.\n"<
E
7%
$/.ody%
$/html%
(odo a la :e
Como resuemen de todo lo *isto %asta a%ora7 *amos a %acer un script donde se me4cla todo7 y
al)o nue*o0 Como e9ercico7 os de9o #ue la incorporacin del buscador de la leccin W0
$html%
$.ody%
$7php
:lin/ - mys*l2connect8"localhost"N "root"9<
mys*l2select2d.8"myd."N:lin/9< //Compro.amos si hemos reci.ido datos del
'orm"lario 8enviar9
i' 8:enviar9 C
// Si reci.imos "n idN modi'icamosN sino a[adimos "n re)istro
i' 8:id9 C
:s*l - "W3!AT; a)enda S;T nom.re-`:nom.re`N direccion-`:direccion`"<
:s*l.- "tele'ono-`:tele'ono`N email-`:email` \4;#; id-:id"<
echo "#e)istro Act"ali&ado$p%"<
E else C
:s*l - ">NS;#T >NTB a)enda 8nom.reN direccionN tele'onoN email9 "<
:s*l .- "=A?W;S 8`:nom.re`N `:direccion`N `:tele'ono`N `:email`9"<
echo "#e)istro A[adido$p%"<
E
// ;nviamos la sentencia SZ? al servidor !M
Jresult - mys#l/#uery!Js#l"N
E elsei' 8:delete9 C
// Morramos "n re)istro
:s*l - "!;?;T; F#B@ a)enda \4;#; id-:id"<
:res"lt - mys*l2*"ery8:s*l9<
echo "#e)istro Morrado$p%"<
E else C
/T ;sta parte se eDec"ta si no hemos
presionado el .oton enviarN es decir no venimos
de "n 'orm"lario T/
i' 8X:id9 C
// @ostramos todos los re)istros de n"estra M!
:res"lt - mys*l2*"ery8"S;?;CT T F#B@ a)enda"N:lin/9ot<S;?;CT T F#B@
a)enda"N:lin/9<
while 8:myrow - mys*l2'etch2array8:res"lt99 C
echo :myrowK"nom.re"L." ".:myrowK"direccion"L." ".
:myrowK"Tele'ono"L." ".:myrowK"email"L<
echo "$a hre'-\:3432S;?F7id-".
:myrowK"id"L."Sdelete-yes"%Morrar$/a%"<
echo " "<
echo "$a hre'-\:3432S;?F7id-".:myrowK"id"L."%@odi'icar$/a%$.r%"<
E
E
7%
$p%$a hre'-"$7php echo :3432S;?F7%"%A[adir "n re)istro$/a%$/p%
$p%$'orm method-"post" action-"$7php echo :3432S;?F7%"%$/p%
$7php
i' 8:id9 C
// editamos el re)istro seleccionado
:s*l - "S;?;CT T F#B@ a)enda \4;#; id-:id"<
:res"lt - mys*l2*"ery8:s*l9<
:myrow - mys*l2'etch2array8:res"lt9<
:id - :myrowK"id"L<
:nom.re - :myrowK"nom.re"L<
:direccion - :myrowK"direccion"L<
:tele'ono - :myrowK"tele'ono"L<
:email - :myrowK"email"L<
// enviamos el id para poder editar el re)istro
echo "$inp"t type-hidden name-"id" val"e-:id%"<
E
7%
Nom.re:$inp"t type-"Text" name-"nom.re" val"e-"$7php echo :nom.re 7%"%$.r%
!irecci6n:$inp"t type-"Text" name-"direccion" val"e-"$7php echo :direccion
7%"%$.r%
Tele'ono:$inp"t type-"Text" name-"tele'ono" val"e-"$7php echo :tele'ono 7
%"%$.r%
;mail:$inp"t type-"Text" name-"email" val"e-"$7php echo :email 7%"%$.r%
$inp"t type-"S".mit" name-"enivar" val"e-";nviar >n'ormaci6n"%
$/'orm%
$7php
E // ;nd >' i' 8:enviar9
7%
$/.ody%
$/html%
Cabe destacar el uso de 1P9P_)7DC7 esta es una $uncion interna de &'& #ue nos de*uel*e la
direccin del script en el #ue se e9ecuta0
Instalacin de My!#$C
5n este capitulo describiremos el proceso de instalacin del dri*er MyO(,C O(,C <= bits para
Windows Ux y Windows IT0 Dracias a este dri*er podremos acceder desde un cliente Windows7
con MS 2ccess por e9emplo7 a un ser*idor remoto MyS+L0
Lo primero #ue debemos %acer es conse)uir el dri*er MyO(,C m8s reciente7 y para ello #ue
me9or #ue podemos %acer es diri)irnos a la web de MyS+L0
Una *e4 #ue tenemos el pro)rama en nuestro ordenador !cliente Windows"7 e9ecutamos el
pro)rama de instalacin7 Setup0

La ca9a de di8lo)os de la instalacin !Install #ri:ers" permite esco)er di*ersos dri*ers O(,C
para instalar7 pero MyO(,C solo da como opcin el dri*er para MyS+L7 el cu8l seleccionaremos0

Una *e4 #ue el dri*er O(,C para MyS+L %a sido instalado7 la si)uiente ca9a de di8lo)os nos pide
con$i)ura el ori)en de la base de datos a conectar0 (entro de la ca9a de di8lo)os #ata Source7
ele)imos el botn Add7 para a3adir un nue*o ori)en de datos0

2 continuacin seleccionamos el dri*er O(,C correspondiente al de la base de datos a la cu8l
nos *amos conectar7 en nuestro caso MyS+L0

E es este momento cuando nos aparece el cuadro de con$i)uracin de nuestra conexin0

Con$i)uracin:
%indo&s #'S name: es el nombre #ue nosotros le daremos a la conexin0
MySQL host Hname or IPI: es el nombre !www0miser*idor0com" o direccin I& del
ser*idor al cu8l nos #ueremos conectar0 Usar pre$erentemente la direccin I&0
MySQL data/ase name: nombre de la base de datos MyS+L a la #ue nos #ueremos
conectar0
=ser: nombre de usuario0
Pass&ord: cla*e del usuario0
Port: puerto #ue usaremos en la conexin7 )eneralmente es el <<@V0 Si es otro es
necesario especi$icarlo0
Iotas:
Con MyO(,C no podemos utili4ar los campos 2cces de tipo ,II2GE
Los par8metrE
Los par8metros de con$i)uracin pueden ser modi$icados en el menH O(,C del Panel de
Control de Windows Ux/IT
&ara reali4ar la conexin a nuestra base de datos MyS+L podemos utili4ar el pro)rama
MS Access0
5s necesario acti*ar la opcin .Allo& /i" results. para e*itar problemas con los campos
de tipo T5]T0
Los usuarios de MS 2ccess =0@ deben acti*ar la opcin .Simulate !#$C @+A.
Conexin remota a MySQL con MS Access
Vamos a *er como conectarnos a una base de datos MyS+L #ue est8 en un ser*idor remoto
mediante un cliente Windows con MS 2ccess0 &ara ello deberemos tener instalado en nuestro
cliente Windows el dri*er MyO(,C0
Lo primero7 es lo primero7 arrancar MS 2ccess7 despuFs en el menH .Archi:o.7 pinc%amos en
.A/rir.7 con lo #ue se nos abre la7 pinc%amos en .A/rir.7 con lo #ue se nos abre la ca9a de
di8lo)os .2brir. y en campo .(ipo de archi:o. seleccionamos .!#$C #ata/ases.0

2%ora debemos seleccionar el ori)en de los datos !la conexin" al #ue nos *amos a conectar7
pinc%amos en la len)^eta de .!ri"en de datos de e9uipo. y esco)emos el .%indo&s #'S
name. #ue bien creamos en la instalacin de MyO(,C o desde el &anel de Windows en .Control
en Fuente de datos !#$C.0

Una *e4 reali4ada la conexin a nuestra base de datos remota MyS+L7 debemos esco)er las
tablas a *incular0

Si las tablas no tienen una cla*e primaria7 MS 2ccess nos pedir8 #ue eli9amos una7 sino
esco)emos nin)una no podremos reali4ar modi$icaciones sobre la tabla0

&ues bien ya tenemos nuestra conexin establecida0 Cabenemos nuestra conexin establecida0
Cabe #ue recordar #ue para poder modi$icar las tablas %ay #ue tener los permisos pertinentes
como usuario de MyS+L0
*xportar un ta/la MS Access a MySQL
Veamos como exportar una tabla de una base de datos MS 2ccess a otra base de datos remota
MyS+L mediante O(,C0
Una *e4 abierta la base de datos ori)en con MS 2ccess7 seleccionamos la tabla y en el menH
Archi:o pinc%amos en *xportar0

5n el si)uiente cuadro de di8lo)o en el campo (ipo de archi:o seleccionamos !#$C
#ata$ases0

2si)namos el nombre #ue *a tomar la tabla exportada en la base de datos MyS+L0

Seleccionamos la conexin O(,C a la base de datos MyS+L0

E ya est8 todo0
Importar ta/las desde MySQL a MS Access
Veamos como %acer para importa una tabla desde una base de datos MyS+L en un ser*idor
remoto *6a O(,C a una base de datos MS 2ccess0
Lo primimero #ue debemos %acer es abrir con MS 2ccess la base de datos a la cHal #ueremos
importar la tabla0 &ic%amos el botn de 'ue:o y en cuadro de dialo)o #ue se nos abre7
seleccionamos .Importar ta/la.0
Importar ta/la.0

5n el si)uiente cuadro de di8lo)o en el campo (ipo de archi:o seleccionamos !#$C
#ata$ases0

Seleccionamos nuestra conexin !#$C0

Ea solo nos resta esco)er las tablas a importar0

Vous aimerez peut-être aussi