Está en la página 1de 54
‘Tutorial de PHP y MySQL (LUCAS) Pagina 1 de 54 Tutorial de PHP y MySQL COMPLETO © José Antonia Rodriguez 2000. hutp://es.tIdp.org/Manuales-LuCAS/manual_PHP/manual_ PHP/ 1. Instalacién de Apaches PHP+ MySQL (© Instalacion en Windows © Moditicar registros © Borrar registros © Todo a la vez © Instalacian en Linux/Unix 5. Comenzando con MySOL © MysaL © Funciones PHP de acceso a MySQL © Gonectar a MySQL deste PHP 2. Sintaxis en PHP © Greacién de una Base de Datos en MySQL © Miprimer seript © Importar bases de datos desde MS Access © Variables y Operadores © Mostrar os datos de una consulta © Seriables y Operadores © Un buscador para nuestra base de datos © Sentencias de Contr © Las Tablas © Las Funciones Since) reeulret) 6. Operaciones con registros © Thampo y fecha © Afadi registros Las Clases en PHP 3. Formularios © Los Formularios 7. Conexion a MySQL con ODBC © Instalacién de MyDOBC © Conexién remota a MySQL con MS Access © Exportar tablas desde MS Access a MySQL © Importar tablas desde MySQL a MS Access (© Descarga de archivos desde un formulario 4. Ficheros © Funciones de acceso a ficheros de Apache:PHP+MySQL en Windows En este capitulo describiremos el proceso de instalcion de la base de datos MySQL, de un servidor web Apache con PHP, en una maquina con sistema operative Windows. Lo primero que debemos hacer es conseguirnos los programas necesarlos, y que mejor para ello que dirigulmnos a las paginas web (0 cualqulera de sus mirros) de los programas en cuestién: ‘cualquiera de sus mirros) de los programas en cuestion (© Apache: www.apache.org "apache 1_8_x_win32.exe © MySQL: waw.mysal.com = mysql-shareware-3.22.34-win.zip © PHP: www.php.net = php-3.0.x-win32.zip NOTA: La version para sistemas Windows de MySQL no es gratulta. Por lo que usaremos la version shareware que esta limitada a 30 dias. La instalacion de estos programas es muy facil, PHP y MySQL vienen comprimidos en formato ZIP y s6lo los tenemos que descomprimir en una carpeta, mientras que Apache es autoe|ecutable: (© Descomprimimos PHP en "C:\php3 ‘Tutorial de PHP y MySQL (LUCAS) Pagina 2 de 54 © Descomprimimas MySQL en "Gamysqr™ (© Hacemos "doble click” en el fichero de Apache y aceptamos el directorio de instalacién por defecto "C:\Archivos de Programas\Apache Group\ Apache" Ya tenemos instalados los programas, ahora s6lo nos queda hacer unos pequefios ajuste de contiguraclén: APACHE 4e contiguracén: APACHE Editamos el fichero de configuracién http.cont que se halla en C:\Archivos de Programas\Apache Group\Apache\cont\" Buscamos la linea donde pone: #ServerNane new.host nat Quitamos el comentario (#) y la camblamos por: ServerName http://localhost Indicamos el directorio de PHP: ScriptAlias /php? \php2" Definimos la extencién de los script PHP: AddType applicat ion/x-httpd-php: AddType applicat ion/x-ht tpd-php: AddType application/x-httpd-php2 -phtml Y asignamos la aplicacién para las extensiones PHP: Action application/x-httpd-php2 */php2/php. Por defecto los ficheros que son accesibles desde el navegador se encuentran el la carpeta htdocs del directorio de Apache, pero la podemos cambiar: scr tonne Para contigurar PHP, primero buscamos el fichero php3.ini-distphp3.lni-dist y lo renombramos a php.ini, después lo editamos y le hacemos los siguientes cambios: Buscamos la expresion "extension_dir" y la camblamos por: extension_dir = C:\php3 Para afadir el soporte para MySQL busca la linea: ; extension = php3_mysql.dll Camblala por extension = php3_mysql.dll ‘Tutorial de PHP y MySQL (LUCAS) Pagina 3 de 54 Copia @l fichero phpS.ini en “G:\windows\™ Ejecuclon de los programas: Pues bien, ya solo nos queda arrancar los programas: C:\Archivos de Progrmas\Apache Group\apache\apache .exe C:\mysql\bin\nysqid.exe fara la version shareware C:\mysql\bin\nysqid-shareware .exe También podemos arrancar el servidor Apache desde el menii de iniclo: Inieio->Progrmas->Apache Web Server->Start Para comprobar nuestra instalacl6n crea un fichero llamado test.php3 con la sigulente linea: Colécalo en el directorio de documentos de Apache y llamalo desde el navegadentos de Apache y Ilimalo desde el navegador. Si lo hemos hecho todo blen nos saldré una pagina con todas las variables de PHP. NOTA: Cabe destacar que lo que hemos echo es una instalacién basica, por lo que recomendamos leer los manuales de las distintas aplicaciones para obtener mas detalles sobre la Instalacion de éstas. Instalaci6n de Apache+PHP+MySQL en Linux/Unix En este capitulo describiremos el proceso de instalcion de la base de datos MySQL, de un servidor web Apache con PHP, en una maquina con sistema operativo Linux o Unix. Lo primero que debemos hacer es consegulrnos los paquetes necesarios, y que mejor para ello que dirigulrnos a las, paginas web (0 cualqulera de sus mejor para ello que dirigulrnos a las paginas web (0 cualquiera de sus mirros) de los programas en cuestion © Apache: www apache.ora © apache-1.9.x.tar.gz © MySQL: ww mysal.com © mysql-3_22_22 tar.gz © PHP: www.php.net © php-3.0.x.tar-gz Para poder realizar todo el proceso de instalacion has de tener acceso como root a la maquin Linux. Lo primero que debemos hacer un directorio de instalacién, aunque lo normal seria que lo hicieramos en / ust/ local, Juts/ sro, 0 bien en / opt. Como hay que escoger uno, yo voy ha escoger el primero, / ust/ local, aunque el proceso serla el mismo si nos declinaramos por cualquier otro. Supongamos que ya nos hemos conseguldo los paquetes y los tenemos en el directorio / root! install, lo primlero que hacemos es descomprimirios: Local root /install/apache-1 ar 2AvE /root /in oot /instal/my ar 2AvE /root/in xetar.gz ‘Tutorial de PHP y MySQL (LUCAS) Pagina 4 de 54 Greamos enlaces sencillos (blandos) a codigo fuente In ~s /usr/lecal/apache-1.3.x /usr/lecal/apache In ~s /usr/lecal/mysql-2.22-x /usr/local/mysal In ~s /usr/lecal/php-3.0.x /usr/lecal/php Preparamos la fuentes par al compllacion de Apache cd /usr/loca/apache -/eonfigure prefs tust/local/apache Compllamos e instalamos MySQL cd /usr/local/mysal -/eonfigure —-witout, make make install ep /usr/local/support-files/mysql.server /ete/re.d/init .a/mysql chmod 755 /ete/re.d/init .d/mysql jebug ~-prefix=/usr/1 2 /mysa Creamos la bases del datos del sistema MySQL. Jusr/ local /ayaql /bin/mysql_install_db ‘Arrancamos el servidor MySQL Jete/re.d/init .d/mysql staxt/ete/re.d/init.d/mysal start Asignamos la password del adminstrador (root ) de MySQL fasr/local/mysql/bin/mysqladnin -u root password Ya hemos terminado con MySQL, ahora compllaremos PHP como médulo de Apache. ed /usr/local/pap -/eonfigure --with-mysql=/usr/local/mysql \ with-apache=/usr/lecal/apache nable-track-vare make make install #ep php3.ini-dist /usr/local/1ib/php2.ini Compllamos Apache ed /usr/local/apache Jeonfigure ~-prefix=/usr/local/apache \ activate-module=are/madules/php2/1ibphp2.a # si hemos compilado PHP4 utilizarenos #--act ivate-module=sre/modules/php4/1ibphp4.a # quitar los comentarios para habilitar el médulo de proxy #--act ivate-module=sre/modules/proxy/libproxy.as proxy modules> make make install Para definir las extenciones de los scripts PHP, hay que afadir las sigulentes lineas en el fichero de contiguracion de apache (httpd.conf) php? PAB phtml Ahora ya sélo nos queda arrancar el servidor, pero primero coplamos el script de arranque en /etc/rc.d/init.d ‘Tutorial de PHP y MySQL (LUCAS) Pagina 5 de 54 cP Tocal /apache/Bin/apachea a7apache d/init.d/apache Para comprobar nuestra instalacién crea un fichero llamado test.php3 con la sigulente linea: <2php phpint Coldcalo en el directorio de documentos de Apache y llamalo desde el navegador. Si lo hemos hecho todo bien nos saldré una pagina con todas las variables de PHP. NoTA: Cabe destacar que lo que hemos echo es una instalacién basica, por lo que recomendamos leer los manuales de las, distintas aplicaciones para obtener mas detalles sobre la instalacion de éstas. Mi primer script Una vez que ya tenemos instalados PHP y MySQL, y el servidor Apache contigurado para usarlos, podemos ‘comenzar a escribir nuestro primer script en PHP. Ejemplo script php ‘chemi> para Indicar el final del script. Hay que destacar que todas las lineas que se encuentre entre estos delimitadores deben acabar en punto y coma, excepto las, sentencias de control (if, swicht, while, etc.) Como en toda programacién, es importante poner muchos comentarios, para lo cual si queremos comentar una sola linea tenemos que poner al principio de la linea //, si lo que queremos es comentar varias utilizaremos los delimitadores /* ~ +/ Para que el servidor envié texto utilizaremos la instruccl6n echo, aunque también podemos utilizar print de uso similar al del C 0 Perl Finalmente, vemos que la palabra myvar comienza con el signo délar ($) . Este simbolo le indica a PHP que es una variable. Nosotros le hemos asignado un texto a esta variable, pero también pueden contener ndmeros o tablas (arrays). Es importante recordar que todas las variables comlenza con el signo délar. También habréis observado que el texto que le asignamos a la variable termina con \n, esto no se Imprime sirve para indicarle al navegador una nueva linea. Variables y operadores ‘Tutorial de PHP y MySQL (LUCAS) Pagina 6 de 54 Ahora antes de seguir, vamos a ver un poco de teoria, Ia sintaxis en PHP. Variables: Como vimos antes todas la variables deben precedidas por signo dolar (5), y le asignamos contenido con el signo Igual (=). Con las varlables, PHP distingue entre mayUsculas y minusculas, por lo que bles, PHP distingue entre maydsculas y minusculas, por lo que no es lo mismo Snyvar que $Myvar, éstas son dos variables totalmente distintas. ‘chemi> Como vels he utllizado dos formas de escribir echo, en mayUsculas y en minusculas, para indicaros que PHP no las, distingue a la hora de usar funclones o sentencias del lenguale. El uso de la barra invertida, como en \n, no es obligatorio, pero ayuda a la depuracién del cédigo que enviamos al navegador, ademas del \n existen otros usos: \"" Caracter dobles comillas \\ Caracter barra invertida \n Nueva linea \r Retorno de carro \t Tabulador horizontal Constante: Las constantes son similares a las variables, con la salvedad de que no llevan el signo délar delante, y sélo la podemos asignar una vez. Para definir una constantes usaremos la funci6n define como sigue: PHP crea diversas constantes al arrancar, como PHP_VERSION que contlene la version de PHP, TRUE que le asigna 1 0 FALSE que le asigna 0. Operadores Aritméticos: $a + $b Suma Sa - Sb Resta Sa * Sb Multiplicacion ‘Tutorial de PHP y MySQL (LUCAS) Pagina 7 de 54 3a / Sb &ss=codigoenlinea>Sa/ $b Division $a % $b Resto de la division de $a por $b Sat+ Incrementaen1 aa Sa Resta 1a$a Operadores de Cadenas: EI Unico operador de cadenas que existen es el de concatenacién, el punto. Pero no os asustéls, PHP dispone de toda una baterla de funciones que os permitiran trabajar comodamente con las cadenas. sa > "Hola"; Sa. "Mundo"; // Ahora $b contiene "Hola Mundo” En este punto hay que hacer una distinclon, la Interpretaclon que hace PHP de las simples y dobles comillas. En el segundo caso PHP interpretara el contenido de la cadena, $a = "Mundo"; echo = ‘Hola $a"; // Esto escribira “Hola $a" echo = "Hola $a"; // Esto escribiré “Hola Mundo&q; //Esto escribira Operadores de Comparacion $a < $b $amenor que $b Sa > $b Samayor que $b $a <= $b $a menor o igual que $b $a >= $b $amayor o igual que $b $a == $b Saigual que $b Sa 1= $b Sadistinto que $b Qperadores Loaicos: $a AND $b Verdadero si ambos son verdadero Sa Ge $b Verdadero si ambos son verdadero Sa OR Sb Verdadero si alguno de los dos es verdadero $a 11S Verdadero si alguno de los dos es verdadero $a YOR Sb Verdadero si s6lo uno de los dos es verdadero i Verdadero si $a es falso, y reciprocamente Operadores de Asignacion Sa = $b Asigna a $a el contenido de $b Sa 4= $b Lesumaa$ba$a $a -= $b Leresta a $b a$a Sa Multiplica $a por $b y lo asigna a $a Sa /= $b Divide $a por $b y lo asigna a Sa Sa .= $b Aflade la cadena $b ala cadena $a Sentencias de control Las sentenclas de control permiten ejecutar bloque de cbdigos dependiendo de unas condiciones. Para PHP el 0 es equivalente a Falso y cualquler otro numero es Verdadero. LE. ELSE La sentencla IF...ELSE permite ejecutar un bloque de instrucclones si la condicién es Verdadera y otro bloque de Instrucclones si ésta es Falsa. Es importante tener en cuenta q instrucciones si ésta es Falsa. Es importante tener en cuenta que la condicion que evaluemos ha de estar encerrada entre paréntesis (esto es aplicable a todas la sentencias de control) ‘Tutorial de PHP y MySQL (LUCAS) Pagina 8 de 54 TF (condieion) Este bloque se ejecuta si la condicién es VERDADERA } else Este boque se ejecuta si la condicién es FALSA , Existe una forma sencilla de usar la sentencla IF cuando no tenemos que usar el ELSE y solo tenenemos que ejecutar una linea de cédigo. Gara 0 "$a es mayor que 4"; LE, ELSEIF ELSE La sentencla IF...ELSEIF...ELSE permite ejecuta varias condiciones en cascada. Para este caso veremos un ejemplo, en el que utllizaremos los operadores logicos. \n"); Esta es una forma de asignar elementos a una tabla, pero una forma mas formal es utllizando la funcién array \n"); sino Sino se especitica, el primer indice es el cero, pero podemes utilizar el operador => para especificar el indice iniclal array(=>"Paris", "Roma", *Sevilla*, "Londres"); Un segundo tipo, son las tablas asoclativas, en las cuales a cada elemento se le asigna un valor (key) para acceder al Para entenderlo, que mejor que un ejemplo, supongamos que tenemos una tabla en al que cada elemento almacena el numero de visitas a nuestra web por cada dia de la semana. Utlizando el método clasico de indices, cada dia de la semana se representarla por un entero, 0 para lunes, 1 para martes, etc. Sviestas(a] Sviestas(1] si usamos las tablas asociativas seria $visitas["lunes* Svisitas["martes* 186; o bien “Tutorial de PHP y MySQL (LUCAS) Pagina 11 de 54 Svisitas = array ("luodigo"ssvisitas = SFFayt Tunes"=5200; *Rarees"=S1B0}7 Ahora bien, recorrer una tabla y mostrar su contenido es sencillo utilizando los Indices, pero gcémo hacerlo en las tablas asoclativas?. La manipulaci6n de las tabas asoclativas se a hace través de funclones que actuan sobre un puntero interno que indica la posicin. Por defecto, el puntero se situa en el primer elemento afadido en la tabla, hasta que es movido por una funcién: current - devuelve el valor del elemento que indica el puntero pos - realiza la misma funcién que current reset - mueve el puntero al primer elemento de la tabla end —_- mueve el puntero al Uitimo elemento de la tabla next - mueve el puntero al elemento siqulente prev - mueve el puntero al elemento anterior count - devuelve el numero de elementos de una tabla. Veamos un ejemplo de las funciones anteriores: "; La tuncién each ()devuelve el valor del elemento actual, en este caso, el valor del elemento actual y su clave, y desplaza el puntero al siguiente, cuando llega al final devuelve FALSO, y termina el bucle while () ‘Tablas multidimensionales Las tablas multidimensionales son simplemente tablas en las cuales cada elemento es a su ver otra tabla. "; La tunclén 11st () es mas blen un operador de asignacién, lo que hace es asignar valores a unas lista de variables. En este caso los valores son extraldos de una tabla por la funcién each () Las funciones Muchas veces, cuando trabajamos en el desarrolo de una aplicacién, nos surge la necesidad de ejectar un mismo bloque de cédigo en diferentes partes de nuestra aplicacl6n. Una Funcién no es mas que un bloque de c6digo al que le pasamos una serle de parametros y nos devuelve un valor. Como todos los lenguaje de programacion, PHP trae una gran cantidad de funciones para nuestro uso, pero las funciones mas gran cantidad de funclones para nuestro Uso, pero las funclones mas importantes son las que nosotros creamos. Para declara una funcion debemos utilizar la Instruccl6n function seguldo del nombre que le vamos a dar, y después entre parentesis la lista de argumentos separados por comas, aunque también habra funciones que no recogan ningun argumento. function nom: i de_funcion (arg_l, arg_2; +++, arg_n) bloque de cédigo , Cualquler instruccl6n valida de PHP puede aparecer en el cuerpo (lo que antes hemos llamado bloque de cbdigo) de tuna funcién, incluso otras funciones y definiciones de clases. En PHP no podemos redetinir una funcién previamente declarada, y ademas en PHPS, las funciones deben detinirse slempre antes de que se Invoquen, en PHP4 este requerimiento ya no existe. La Instrucclon RETURN Cuando invocamos una funcién, la ejecucién del programa pasa a ejecutar las lineas de cédigo que contenga la tunci6n, y una vez terminado, el programa continua su ejecucién desde el punto en que fué llamada la tuncion Existe una manera de terminar la ejecucién de la funcl6n aunque aun haya c6digo por ejecutar, mediante el u haya cédigo por ejecutar, mediante el uso de Ia instrucién return terminamos la ejecucién del cédigo de una funcién y devolvemos un valor. Podemos tener varios return en nuestra funcién, pero por lo general, cuantos mas return tengamos menos reutilizable serd nuestra funci6n, $y) | return $x." e2 mayor q se ‘Aunque quedarla mejor: "; // imprimiré el valor de $a $a = 1) // sumamos 1a $a 11 amprimird 1 77 smprimira 11 amprimird 7 V7 Amprimird 8 Funclones Varlable PHP soporta el concepto de funciones variables, esto es signitica que si una variable tiene unos parentesis afiadidos al inal, PHP buscara un funcién con el mismo nombre que el contenido de la varlable, e intentara ejecutarla. Stextoc/B>\n ‘Tutorial de PHP y MySQL (LUCAS) Pagina 15 de 54 GiiFunc = “inprime™; sMiFunc ("Hola"); //imprimira Hola sMiFunc = "imprimeNegrilla"; sMiPunc ("Hola"); //imprimira Hola Recursion PHP t> Recursion PHP también permite la recursion, es decir, una funcién se puede llamar asi misma. Para aclarar el concepto de recursion, vamos a crear una funcién que comprueba si un numero es entero o no. Un numero que no sea entero (7°4), tiene una parte entera y otra decimal (comprendida entre 0 y 1), lo que vamos a hacer para comprobar si un numero es entero o no, sera restarle 1 al numero en cuestion hasta que nos que demos sin parte entera, y entoces comprobaremos sl tiene parte decimal (un poco lloso todo ésto). 1) ( return (esEntero($numero -1)); } elseif (Snumero < 0) { 7* como Los nim. son simétricos chequeamos lo convertimas a positvo */ return (esEntero((-1) * Snumero -1)); ) else: > 0) AND (Snumero < 1)) { } else ( /* €1 cero es entero por definicién */ return ("5: ) } //£1n function echo "ZEs 0 un numero entero? *.esEntero (0) .*\n echo "ZEs 3.5 un numero entero? *.esEntero(?.5) echo "ZEs -7 un niimero entero? *.esEntero(-7) echo "Es -9.2 un nmera entero? ",esEntero(9.2) C6mo ahorrarnos lineas de c6digo En las lecciones anteriores hemos aprendido el uso basico de las funciones de PHP para trabajar con MySQL. En esta leccién y sucesivas vamos a ver nuevas funciones que nos facilitan y potenclan nuestras paginas web. Por lo general, todos nuestros script tlenen partes de cédigo iguales, las funciénes include() y require() nos van ahorrar muchas de estas lineas de cédigo. Ambas funciones hacen una llamada a un determinado fichero pero de dos maneras diferentes, con include (), Insertamos lo que contenga el fichero que llamemos de manera literal en nuestro script, mientras que con require(), le decimos que el script necesitara parle de cédigo de se encuentra en el fichero que llama require () Come todo esto es un poco lloso, veamos unos ejemplos que nos lo aclara. ‘Tutorial de PHP y MySQL (LUCAS) Pagina 16 de 54 y el fichero footer.inc contlene: Nuestro script serla equivalente a: include echo Scadena; include ("footer. inc’ Donde el fichero contig.inc tendrla algo como ésto: 20000407 mig Hs at) > O7/ (aem-¥ Hei, time gy) —> 00 14:20 pr el momento actual mktime(hora, min, seg, mes, dia, aflo) La funclon mktime devuelve una variable de tipo timestamp a partir de las coordenadas dadas. La principal utllidad de esta funcion es la de afadir o quitar una determinada cantidad de fecha u horas a una dada, (asset ($date) ) Sdate = time(); ) List (Shora, Smin, Sseg, Sdia, Smes, Sanno) = explodest (Shora, Smin, $seg, $dia, $mes, Sano) explode ( Basa my; 5 y mktime(Shora, $min, $seg, Smes, $4, $anno)); return $fecha; ) echo earDias (5) ."
"; echo restarDias(10)."
"; chekdate (mes, dia, afio) La funcién chekdate comprueba si una fecha es valida, si es asi devuelve TRUE y si no lo es FALSE, Una fecha se considera vallda si el afio esta entre 1900 y 32767, el mes entre 1 y 12, y el dia es menor o igual que numero de dias total del mes en cuestién. <2PHP Af (checkdate(21, 2, 2000)) { echo "La fecha es correcta"; } else echo fecha es incorrecta"; ‘Tutorial de PHP y MySQL (LUCAS) Pagina 18 de 54 Para el ejemplo anterior nos darla qué la fecha es Incorrecta, febrero nunca tlene un dia 37 Las clases Las Clases son maximo exponente de la Programacién Orientada a Objetos (POO). PHP no es un lenguaje orlentad a objeto, pero implementa las caracteristicas que permiten definir las clases. Pero, {qué son las Clases y para que sirven?, empecemos por los segundo, sirven hacer el cbdigo mas legible, y lo que es mas importante, reutilizable. Escribir una Clase es sin duda mas largo que escribir el codigo directamente, pero a la larga es mas rentable por su portabllidad a otras , pero a la larga es mas rentable por su portabilidad a otras, aplicaciones y su mantenimiento. Las Clases no son mas que una serle de variables y tunciones que describen y actuan sobre algo. Por ejemplo, vamos a crear la clase autonévii, la cual tendra diversas variables, $color, $modelo, $marca, $potencia, Smatricula y habra una serie de funciones que actuaran sobre la clase autonévil como Precio(), Acelerar(), Frenar(), Girar ()y Reparar () Como ejemplo vamos a crear la clase mysql, que nos servira para realizar consultas a las bases de datos MySQL. BaseDatos = 9b his>Servidor = Shots Sthis>Usuario = $user; nobody", /*Conexién 2 1a base de datos*/ function conectar($bd, $host, $user, Spas) { (Sha != "") Sthis-sBaseDatos = Spay (Ghost I= 1) Sthis->Servidor = Shost; (user I=") $this->Usuario = Suser; Af (pass != "*) Sthis->Clave = $pass; // Conectamos al servider Sthis->Conexion_ID = mys (Sthis->Conaxion_1D) ror = "Ha fallado la conexién (this>Servidor, $thissUsuario, §this->Clave); return 0; //seleccionamos 1a base de datos AE (Jenysql_select_db ($this->BaseDatos, $this—>Conexion_1D)) { Sthis->Error = "Imposible abrir *.Sthis->BaseDatos ; return 0; ‘Tutorial de PHP y MySQL (LUCAS) Pagina 19 de 54 /* Si hemos tenide éxite conectando devuelve el identificador de 12 conexién, sino devuelve 0 */ return §this->Conexion_ID; , /* Bjecuta un consulta */ function consulta ($sql = "") ( Af (Ssql ==") Sthis->Error = "No ha especificado una consulta SOL"; return 0; /fejecutamos 1a consulta Sthis->Consulta_I = @nysqi_query(Ssql, $this->Conexion_1D); Af (15this->Consulta_ID) Sthis>errno = mysql_errno(); Sthis>error = mysql_error(); ) /* Si hemos tenide éxito en la consulta devuelve el identificador de 12 conexién, sino devuelve 0 */ return §this->Consulea_IDj , /* Devuelve el niimero de campos de una consulta */ function numcampos() | return mysql_num fields ($this->Consulta_ID); , /* Devuelve el niimero de registros de una consulta */ function numregistros() { return mysql_nun_rows ($this->Consulta_ID); , /* Devuelve ©1 nombre de un campo de una consulta */ Fonction nombrecampo($nuncanpe) _{ return mysql_field_name(Sthis->Consulta ID, Snumcampo) , /* Muestra los datos de una consulta */ function verconsulta() { echo "\n") // mosteamos los nombres de los campos for (51 = 07 $1 < $this->numcampos(); i++) { echo "\n"; ) echo "\n"y // mostrarmos los registros while ($row = mysql_fetch_row($this~>Consulta echo " \n"y for ($1 = 0; $1 < $this->numcampos(); $i++) { echo " \n"; echo " \n"! echo " \n"; do { echo " \n"; echo " \n"; echo "\n"; echo " \n"; } while. (Srow = mysql_fetch array ($result); echo "
", Sthis->nombrecampo ($4) ."
". $row[$i] .\n"y ) echo "\n"; } //fin de la Cise DB_mysal Como habreis observado, para crear una clase utilizamos la sentencia class, y ademas hemos creado una funcién ‘con el mismo nombre que la clase, a esa funcién se le llama constructor y se ejecutara cada vez que definamos una ‘Tutorial de PHP y MySQL (LUCAS) Pagina 20 de 54 Variable de esa clase. No es obligatorina varlable de esa clase. No e8 obligalorlo crear un constructor en una detinicién de clase. tra cosa importante en las clases es el operador ->, con el que Indicamos una variable o método (parte derecha del operador) de una clase (parte Izquierda del operador). Para hacer referencia a la clase que estamos creando dentro de su definicién, debemos utilizar this. Y ahora veamos un ejemplo de la clase que hemos creado, y supongamos que el cédigo anterior lo hemos guardado en un fichero llamado clase_mysql.inc.php. boay> heml> consulta ("SELECT * FROM agenda") ; nsulta () Los formularios Los Formularios no forman parte de PHP, sino del lenguaje estander de Internet, HTML, pero como éstos van a aperecer muchas veces durante el curso, vamos a dedicar esta algunas lineas a ellos. Lo que viene a continuacién es HTML y no PHP. Todo formulario comlenza con la etiqueta
. Con . Con ACTION Indicamos el script que va procesar Ia informacion que recogemos en el formulario, mientras que METHOD nos Indica s| el usuario del formulario va ha enviar datos (post) 0 recogerlos (get). La etiqueta indica el final del formulario. Aparlir de la etiqueta vienen los campos de entrada de datos que pueden ser: Cuadro de texto: Es de color rojo Casilla de verificacion heckbox" nant cambiar" valu! Mend desplegable: Boton de comando:

Tu nombre Tu sistema favorito ;Cual es tu sexo?

lionbreMujer

Aficiones

jose">

Windows ">Windows (ON" >

"radio" value="honbre" checked name="sexo">

"radio" name="sexo" value="mujer">

Y ahora creemos el script PHP llamado desde le formularlo mis_datos.php: " . nombre . " que tal estas
\n"; echo "Eres". sexo . "
\n"; echo "Tienes " . Sedad . "
\n" echo "Tu sistema favorito es " . §sistema . "
\n"; if (Stutbol) ( echo "fe gusta el futbol
\n"; } else odigo” style="mazgin-left: 50">) else ( ‘echo "NO te gusta el futbol
\n"; ) Lf (Saficiones I= "") ( echo "Tus aficiones son:
\n"; echo nl2br (Saficiones) ; } else ( ‘echo "NO tienes aficiones
\n"; ) ) echo " Una vez rellenados los datos del formulario, pulsamos el botén Enviar datos, con lo que le campo enviar toma lo que su etiqueta value indica, es decir enviar="Envlar datos". En nuestro script lo primero que evaluamos es que se haya enviado el formulario, y para ello nada mejor que comprobar que la variable $enviar no esta vacia. Le ponemos el ‘Tutorial de PHP y MySQL (LUCAS) Pagina 22 de 54 signo dolar delante a enviar, ponemos el signo dolar delante a enviar, ya que en PHP todas las variables se les reflere ccon este signo. Pero y fusionaramos el cédigo de ambos fichero, nos ahorrariamo uno. Sila varlable $enviar esta vacla, enviamos el formulario. " . nombre . " que tal estas
\n"; echo "Eres". sexo . "
\n"; echo "Tienes " . Sedad . "
\n" echo "Tu sistema favorito es " . §sistema . "
\n"; if (Stutbol) ( echo "fe gusta el futbol
\n"; } else { ‘echo "NO te gusta el futbol
\n"; ) Lf (Saficiones I= "") ( echo "Tus aficiones son:
\n"; echo nl2br (Saficiones) ; } else ( ‘echo "NO tienes aficiones
\n"; ) echo "
VOLVER AL FORMULARIO" } else (

Tu nombre

Tu sistema favorito

cle gusta el futbol ? ;Cual es tu sexo?

lionbre

(ON" >

Mujer

‘enviar"> 'Restablecer" nane="B2">

“<2PHE } //tin TF 30" La varlable de entorno $PHP_SELF, es una variable de entorno que nos devuelve el nombre del script que estamos ejecutando. Y por ultimo, hacer notar el uso de la funclon nlabr(), nl2br(), con la cual sustituimos los retornos de carro del texto, los cules no reconocen los navegadores, por la etiqueta
. Descarga de archivos ‘Tutorial de PHP y MySQL (LUCAS) Pagina 23 de 54 Vamos a ver un caso especial, como descargar un archivo desde un formulario, Para ello ulllizaremos una eliqueta INPUT de tipo FILE, soportada a partir de las versiones de los navegadores Nestcape Navigato 2.0 e Internet Explorer 4.0, El formulario debe usar el método post, y el atributo post, y e1 atributo enctype debe tener el valor multipart/form-data. Adends al formulario debenos afiadirle un campo oculto de nombre MAK PILE_SIZE, al cual le daremos el valor en byte del tamafio miximo del archivo a descargar. ‘ \rchivo" TYPE="file"> submit" VALUE="Descargar Archivo"> Cuando el formularlo es enviado, PHP detectarara automaticamente que se esta descargando un archivo y lo colocara en un directorio temporal en el Servidor. Dicho directorio sera que el que esté indicado en el archivo de configuracion php3.ini, 0 en su defecto en el directorio temporal del sistema. Cuando PHP dectecta que se esta descargando un archivo crea varlas varlables con el pretijo del nombre del archivo pero con distintas terminaciones. La variable terminada en _name contlene el nombre original del archivo, la terminad en _size el tamafo en bytes de éste, y la variable terminada en type nos indicard el tipo de archivo si éste es ofrecido por el navegador. Si el proceso de descarga no ha sido correcto la variable archivo tomara el valor none y _size sera 0, y si el proceso ha sido correcto, pero la variable teminada en _size da 0, qulere decir que el archivo a descarga supera el tamafio maximo Indlcado por MAX PILE_SIZE. Una vez descargado el archivo, lo primero que debemos hacer es moverlo a otro lugar, pues sino se hace nada con él, ‘cuando acabe la ejecucion de la pagina se borrara. Veamos un ejemplo de todo lo dicho. ‘ <2PHP if (Senviar) (if (Senviar (archivo != "none" AND Sarchivo_size echo "Nombre: Sarchive_name
\n"; echo "Tamanho: Sarchivalsize
\n"; echo "Tipo: Sarchive type
\n /* para Windows Af (1 copy (Sarchive, "C:\\TEMP\\".Sarchive_name)) { echo "

No se ha podide copiar el archivac/h2>\n" 0) “ /* para Linux/Unix */ £ (1 copy (Sarchivo, */tmp/* echo "

No se ha pedide copiar ivo_name) ) YP archivoc/n2>\n"y } elseif (archive != tnone™ AND Sarchiv: ° echo "

Tamano de arcft: } else ( echo "

No ha esc t superado

\n"; ) echo "
\n"; cb>Archive a deaca 2php echo SPHP_SELF 2>" METHOI 100000"> ‘Tutorial de PHP y MySQL (LUCAS) Pagina 24 de 54 ‘ venviar® value: ptart>

Funclones de acceso a ficheros Posiblente durante nuestra tarea de programacién nos surga la necesidad de obtener datos de un tichero, 0 bien, de crear uno. PHP nos provee de una extensa gama de funciones de acceso a ficheros. En esta lecclén solo vamos a las funciones basicas, abrir (fopen), cerrar (folose), leer (gets) y escribir (tputs). Estas cuatro nos solventaran la mayorla de problemas quelbir (fputs). Estas cuatro nos solventaran la mayorla de problemas que nos surgan con respecto al acceso a ficheros. fopen (archivo, modo) Con esta funcién abrimos un fichero, blen sea local o una direccién de internet (http:// o ftp://) La funclén fopen nos devuelve un valor numérico (Indicador de archivo) de tipo integer que nos serviraré para hacer referencia al archivo ablerto. Con topen podemos abrir un archivo de los siguientes modos: = solo lectura et lectura y escritura w solo escritura. Sino existe el archivo lo crea, si ya existe lo machaca. wt lectura y escritura, Sino existe el archivo lo crea, si ya existe lo machaca. ‘a solo lectura. Sino existe el archivo lo crea, si ya existe empleza a escribir al tinal del archivo. at lectura y escritura, Sino existe el archivo lo crea, si ya existe empleza a escribir al final del archivo. <2PHP ‘Jabreo">$archivo = fopen("data.txt" , 42 (Sarchiva) { while (!£e0£($archiva)) { $linea = fgete(Sarchivo, 255); echo Slinea ‘Tutorial de PHP y MySQL (LUCAS) Pagina 25 de 54 7 : Felose (Sarchivo) ; La funcion feof devuelve TRUE si puntero de lectura/escritura se encuetra al final del tichero, y FALSE en caso contrario. tputs (Indicador_archivo, cadena) La funclén tputs escribe una cadena en el fichero Indicado. Para escribir en una archivo este debe haber sido previamente ablerto. La funcién {puts devuelve TRUE si se ha escrito con éxito, en caso contrario devuelve FALSE. <2PHP Jabre un archivo y escribe e: Sarchivo = fopen(*data.txt™ , "w"); if (Sarchivo) { ats (archive, "Hola Mundo"); : Felose (Sarchivo) ; <) telose (Indicador_archivo) Con esta funcién cerramos el fichero que nos marca el indicador de archivo, devuelve TRUE si el fichero se clerra correctamente y FALSE sino se ha podido cerrar. tile_exists (fichero) Esta funcién devuelve TRUE si el archivo especificado existe, y FALSE en caso contrarlo. ists ("data.txt")) { echo "EL fichero ext } else echo "EL fichero NO existe"; copy (origen, destino) La tuncién copy copia un fichero de un lugar (origen) a otro (destino), devuelve TRUE si la copla a tenido éxito y FALSE en caso contrarlo. <2PHP 4£ (copy(Mdata.txt", */tmp/data.txt")) ( echo "El fichero ha sida copiado con éx: } else ‘echo Fichero NO se higo" style 30 se ha podide cops “Tutorial de PHP y MySQL (LUCAS) Pagina 26 de 54 MySQL En esta lecclén vamos a hacer un pequefto recorrido por MySQL, por su estructura y forma de trabajar. Para ello suponemos que ya hemos conseguldo (por fin...) instalar MySQL en nuestra maquina, Lo primero que debemos hacer es arrancar MySQL (ver capitulo de instalacién): © Linux: ./aysaid stare © Windows: nysqld-shareware exe Todo el sistema de permisos de acceso al servidor, a las bases de datos y sus tablas, MySQL lo almacena en una tabla llamada mysql, que como todas estard en el directorio / data, a menos que hallamos especiticado otro directorio. En Windows esta tabla se crea con Ia instalacién, pero en Linux/Unix debemos crearla con: usr/local/mysal /bin/my En la base de datos mysql es donde se guadaran todos los permisos y restricciones a los datos de nuestras bases de datos. La principal herramienta de MySQL es nysqladmin, la cul como parece Indicar su nombre es la encargada de Ja administraci6n, MySQL crea por defecto al usuario root con todos los perimsos posibles habilitados, podemos utllizar este usuario ‘como administrador 0 crear otro, por ejemplo mysqladmi. Como el usuario root lo crea sin clave de acceso, lo primero que debemos hacer es asignarle una: mysqladnin -u root password *miclave™ A partir de ahora cualquier operacién que hagamos como root deberemos especifica la clave. Hay que destacar que enter el moditicador -p y la clave no debe habeficador -p y la clave no debe haber espacios. mysqladmin -a ~pmiclave Pues bien, ya estamos preparado para crear una base de datos, mibas mysqladmin -u root -pmiclave creat Para borrarla mysqladmin -u x ~pmiclave drop mibasededatos La estructura de MySQL En el directorio /benc encontraremos ejemplos de script y SQL. En el directolo /share estén los mensajes de error del servidor para los distinos idiomas. Los directorlos /include y /lib contiene los tichero *.h y las librerias necesarlas, en Jbin estan los ficheros eJecutables y en /data encontraremos como subdirectorlo cada una de las bases de datos que hayamos creado. Como hemos dicho, para cada base de datos que nostros creamos, MySQL crea un directorio con el nombre que le hemos asignado a la bade de datos. Dentro de este directorio, por cada tabla que definamos MySQL va ha crear tres, archivos: mitabla.I SD, mitabla.l SM, mitabla.trm El abla.trm EI archivo con extensién ISD, es el contine los datos de nuestra tabla, el ISM contlene informacion acerca de las claves y otro datos que MySQL utiliza para buscar datos en el fichero | SD. Y el archivo frm contine la estructura de la propia tabla. ‘Tutorial de PHP y MySQL (LUCAS) Pagina 27 de 54 Dado que las bases de datos de MySQL son simples ficheros de un directorio, para realizar coplas de seguridad, podremos utllizar las herramientas de compresién que habltualmente usamos en nuestro sistema y luego coplarlo a otro lugar, o simplemente esto dltimo. Seguridad Como comentamos anteriormente, todo el sistema de permisos MySQL lo guarda en una base de datos llamada mysqi, la cual se componen de cinco tablas: host, user, db, tables_priv, colums_priv. La tabla user contlene Informacion sobre los usuarios, desde que maquinas pueden acceder a nuestro servidor MySQL, su clave y de sus diferentes permisos. La tabla host nos informa sobre que maquinas podran acceder a nuestro sistema, asi como a las bases de datos que tendran acesso y sus diferentes permisos. Finaimente, las tablas, db, tables_priv, columns_priv nos proveen de un control individual de las bases de datos, tablas y columnas (campos) Tabla user CAMPO ‘TPO, POR DEFECTO Host char(60) User char(16) Password char(16) Select_priv enum('NY) N Insert_priv enum('NY) N Update_priv enum('NY) N Delete priv enum('N','Y) N Create_priv enum('N','Y) N Drop_priv enum('N','Y) N Reload_priv enum('NY) N Shutdown_priv enum('NY) N Process_priv enum('N','Y) N File_priv enum('N','Y) N Grant_priv enum('NY) N Reterences._priv enum('N',"Y) N Index_priv enum('NY) N Alter_priv enum('N','Y) N Tabla host CAMPO ‘TPO, POR DEFECTO Host char(60) Db char(32) Select_priv enum('NY) N Insert_priv enum('NY) N Update_priv enum('NY) N ‘Tutorial de PHP y MySQL (LUCAS) Pagina 28 de 54 Delete_priv create_priv Drop_priv Geant_priv Reterences_priv Index_priv Alter_priv Select_priv Insert_priv Update_priv Delete priv create_priv Drop_priv Reterences_priv Index_priv Alter_priv enum(N enum(N enum(N enum(N enum(N enum(N enum('N! Tabla db Tipo, char(60) char(82) char(16) enum(N enum(N enum(N enum(N enum(N enum(N enum(N enum(N enum('N! ” ™» ™» ™» ™» ™» ™» ™» ™» ™» ™» ™» ™» ™» ™» ™» He aqui una breve descripcién de los diferentes permisos: Select_priv: Permite utilizar la sentencia SELECT Insert_priv: Permite utilizar la sentencia INSERT Update_priv: Permite utilizar la sentencia UPDATE Delete_priv: Permite utilizar la sentencia DELETE Create_priv: Permite utilizar la sentencia CREATE o crear bases de datos Drop_priv: Permite utilizar la sentencia DROP o eliminar bases de datos Reload_priv: Permite recargar el sistema mediante mysqladmin reload Shutdown_priv: Permite parar el servidor mediante mysgladminPermite parar el servidor mediante mysgladmin shutdown Process_priv: Permite manejar procesos del servidor POR DEFECTO File_priv: Permite leer y escribir ficheros usando comando como SELECT INTO OUTFILE y LOAD DATA INFILE Grant_priv: Permite otorgar permisos a otros usuarios Index_priv: Permite crear 0 borrar indices Alter_priv: Permite utilizar la sentencia ALTER TABLE Si dejamos en blanco los campos user, host o db, haremos referencia a cualquler usarlo, servidor 0 base de datos. Conseguiremos el mismo efecto poniendo el simbolo % en el campo ‘Tutorial de PHP y MySQL (LUCAS) Pagina 29 de 54 Funclones PHP de acceso a MySQL En esta lecclon vamos a ver todas la funciones que provee PHP para el manejo de bases de datos MySQL. Los ejemplos del manejo de las {unciones, los veremos a lo largo del curso. mysql_attected_rows int mysql_aftected_rows(int [link identifier] ); mysql_aftected_rows devuelve el ndmero de filas afectado en el ditimo SELECT, UPDATE o DELETE pregunta en el servidor asoclado con el Identificador de conexién especiticado. SI no se e especitica un Identificador de conexlén, se asume le de la ultima conexién ablerta, Este orden no es eficaz para las Instrucciones SELECT, s6lo en Instrucciones que moditican archivos. Para recuperar el numero de fllas vuelto de un SELECT, usa mysql_num_rows. mysql_close int mysql_close (int [1ink_identifie: Devuelve: TRUE si se ha cerrado correctamente, FALSE en caso de error mysql_close closes la conexién a la base de datos MySQL asoclada al identicador de conexién especiticado. Si no see specifica un identificador de conexlon, se asume le de la ultima conexién ablerta. Note que esta funcién no es normalmente necesaria en conexlones no-persistentes (ablertas con mysl_connect) ya que ést se cerraré automaticamente al final de la ejecucién del script o pagina. La funcién mysql_close fo clerra una conecién persistente (ablerta con mysql_pconnect()) Ver tambien: mysql_connect y mysql_pconnect. mysql_connect int mysal_con ct (string [hostname] , stri g (password) ); Devuelve: un Identiticador de conexién, o FALSE en caso de error. sql_connect establece una conexi6n a un servidor de MySQL. Todos los argumentos son optativos, y si no se especifican, los valores por defecto son (’ el localhost’, nombre del usuario del usuario que posee el proceso del servidor, la contrasefa vacia). La cadena hostname también puede incluir un numero del puerto, "hostname:port En caso de realizar una segunda llamada a mysql_connect con los mismos argumentos, no se establecera ninguna nueva conexion, sino se devolvera el identificador de conexién de la ya existente, La conexién al servidor se cerrara en cuanto la ejecucién del script acabe, a menos que la cerremos antes con la funcion mysql_close. Ver también: mysql_pconnect y mysql_close. mysql_create_db ‘Tutorial de PHP y MySQL (LUCAS) Pagina 30 de 54 Tne mysql_create_db (string database fame, Int [Iink_identifier] Vy La funcién mysql_create_db intenta crear una nueva base de datos en el servidor asociado con el Identificado de conexi6n especificado, Ver también: mysql_drop_db. mysql_data_seek int mysql_data_seek (int result_identifier, int row_number); Devuelve: TRUE si toda ha Ido blen, y FALSE en caso de error. La funcién mysq|_data_seek mueve el puntero que Indica la flla actual al numero de fila de la consulta que Indica el Identificador. La proxima llamada al mysql_tetch_row o mysql_tetch_array devolveria esa tll. Ver también: mysql_data_seek, mysql_dbname ysqi_dbnane ( ing resu! mysq|_dbname devuelve el nombre de la base de datos guardado en posicién | de los resultados del indicador de consulta devuelto por la funcién del mysq|_list_dbs. La funcién de! mysq|_num_rows puede usarse para determinar cuantos nombres de bases de datos estan disponibles mysql_db_query mysal. query (stri ) string query, int link_identifier); Devuelve: un identiticador de conexién, o FALSE en caso de error.< caso en FALSE 0 conexién,> Ejecuta una consulta en una base de datos. Si el Identiticador no se especifica, la funclén Intenta encontrar una conexi6n ablerta con el servidor. Si no encuentra una conexi6n, intentara crear una (similar a mysql_connect( ) sin argumentos) See also mysql_connect. mysql_drop_db int mysql_drop_db (string database_name, int [Link identifier] ); Devuelve: TRUE si toda ha Ido blen, y FALSE en caso de error. Elimina una base de datos del servidor asoclado al identiticador de conexién Ver también: mysql_create_db mysql_errno ‘Tutorial de PHP y MySQL (LUCAS) Pagina 31 de 54 TIYSaL_erEnO(? Devuelve el numero de error asociado a la ultima operacién realizada. Ver también: mysql_error mysql_error @ mysal_s Devuelve el texto asoclado al error producido en la ultima operacién realizada por la base de datos. > Ver también: mysql_errno mysql_fetch_array array mysql_fetch_array(int result); Devuelve un array con la informacion correspondiente al resultado de una consulta especiticado por su identificador 0 ‘false’ si ya no hay més fllas. Es una versién extendida de mysql_tetch_row ( ). Ademas de almacenar los datos a través de indices numéricos de! array, también lo hace a través de indices asociativos, utilizando los nombres de los campos como claves. Si dos 0 mas columnas del resultado tienen el mismo nombre de campo, la ultima es la que tlene preferencia. Para acceder a las demas es necesario utilizar el indice numérico o construlr un allas para la columna: select t1.11 as foo 12.11 as bar trom t1, t2 as foo 12.11 as bar trom tt, 12 Esta funcion no es més lenta que 'mysql_tetch_row( )°. Example 1. mysql fetch array <7php mysql_connect Shost,Suser,$password) ; Sresult = mysql_db_query("database*,"select * from table while(Srow = mysql_tetch_array(Sresutt)) ( echo $row{"user_id"] echo $row{"tuliname’ mysql_tree_result(Sresult); > mysql_fetch_tield ‘Tutorial de PHP y MySQL (LUCAS) Pagina 32 de 54 mys Telatiae sare, Devuelve un objeto que contiene Ia Informacién de los campos que componen un resultado de una consulta. Si no se especitica ‘offset’, devuelve informacion sobre el sigulente campo que todavia no ha sido devuelto. Propledades del objeto devuelto: ‘© name - nombre del campo ‘© table - nombre de la tabla a la que pertenece el campo ‘© max_length - longitud maxima que puede tomar el campo ‘* not_null - 1 si el campo no puede tomar valores nulos ‘¢ primary_key - 1 si el campo es una clave principal (primary key) © unique_key - 1 siel campo tiene restriccion de unicidas ‘© multiple_key - 1 si el campo no tiene rest ‘© multiple_key - 1 siel campo no tiene restriccion de unicidad * numeric 1 si el campo es numérico ‘© blob - 1 siel campo es BLOB ‘¢ type - tipo de dato (del campo) ‘© unsigned - 1 si el campo es ‘unsigned’ ‘© zerolill- 1 siel campo es rellenado con ceros See also mysql_tleld_seek mysql_fetch_lengths mysal. engthe (int result); Devuelve: una tabla o FALSE si hay error. mysq|_fetch_lengths almacena en una tabla la longitud de cada campo de una consulta realizada con mysq|_fetch_row o mysq|_fetch_array. 1 Indice de la tabla comlenza en 0. Ver también: mysql_fetch_row. mysql_fetch_object mysal_s Devuelve: un objeto o FALSE en caso de error. Esta funcion es similar a'mysql_tetch_array, solo que los resultados de una consulta, en lugar de una tabla, los devuelve como un objeto. En este caso, solo se puede acceder a los datos a través de los nombres de sus campos. La velocidad de ejecuclén es Idéntica a la de 'mysql_fetch_array. Para referenciar el valor de un campo debemos utilizar el operador tipicos de los objetos (->).< objetos tipicos> Ver también: mysql_fetch_array and mysql_tetch_row. mysql_fetch_row array mysql w (int resul Devuelve: una tabla o FALSE si hay error. ‘Tutorial de PHP y MySQL (LUCAS) Pagina 33 de 54 Devuelve un tabla con los valores de los campos de la fila actual de la cosulta, la que especificar el Indicador (result) , y mueve el puntero interno que marca la {lla actual a la sigulente fila, si no hay mas fllas devuelve FALSE. El indice de fa tabla comienza en 0. Ver también: mysql_fetch_array, mysql_tetch_object, mysql_data_seek, mysql_fetch_lengths, and mysql_result. mysql_field_name nysql_field nane(string result, int i); Devuelve el nombre del campo especiticado por el indice. mysql_fleld_seek mysal. eld_seek(int result, int fleldoffset); Mueve el puntero del campo actual hacla adelante las posiciones actual hacla adelante las posiciones indicadas por ‘ottser’ Ver también: mysq|_fetch_tield mysql_fleld_table nysql_field table (int sult, int £. Devuelve el nombre de la tabla que almacena el campo especiticado por el indice ( ‘tleld_oftset' ) mysql_tield_type nysql_field type(string result, int Devuelve el tipo del campo del indice especiticado. mysql_tield_tlags string mysql_fiel flags(string result, int field_offset); Devuelve los especificadores (flags) del campo especiticado como una cadena de texto en la que cada especiticador se corresponde con una palabra, y éstas van separadas mediante un espacio simple. Se puede analizar la cadena utllizando explode( ) Los especiticadores son: ‘not_null’, *primary_key*, “unique_key", "multiple_key", “blob”, “unsigned”, "zerofill", "binary", "enum" ‘auto_increment", "timestamp" mysql_tield_len ‘Tutorial de PHP y MySQL (LUCAS) Pagina 34 de 54 miysal Devuelve la longitud del campo especificado mysql_free_result mysal_s sult (int Solo deberia ser utilizada si la cantidad de memoria utillzada para almacenar el resultado de una consulta es muy grande. Cuando se ejecuta esta funcién, toda la memorla asoclada al resultado se libera. mysql_insert_id mysql_insert_id (void); Esta funcién devuelve el ID (identiticador) generado para los campos autonuméricos (AUTO_INCREMENTED). £1 1D devuelto es el correspondiente al de la ultima operacion INSERT. mysql_list_tields int mysql_list_fields(string database, string tablenane) ; Devuelve informacion sobre la tabla. El valor resultante puede ser utilizado con mysql_field_tlags(), mysql_tield_len(), mysql_tield_name(), and mysql_tield_type(). El Identificador que devuelve es un entero positivo o '-1" en caso de error. El texto que describe el error se encuentra en $phperrmsg. mysql_list_dbs int mysql_listabs (void); Devuelve un puntero que contiene las bases de datos disponibles para el servidor actual (msql daemon). Este valor se utiliza con la funcién mysql_dbname( } mysql_list_tables myaql_list_tables (string da base, , int (1ink_identéfier]); Devuelve un identiticar, el cual pasaremos a la funcién mysql_tablename para extraer el nombre de las tablas de la base de datos especificada. mysql_num_tields int mysql_num_fields(int result); mysq|_num_fields devuelve en numero de campos de una consulta, ‘Tutorial de PHP y MySQL (LUCAS) Pagina 35 de 54 Ver también: mysqi_db_query, mysql_query, mysqi_fetch_fleld, mysql_num_rows. mysql_num_rows int mysql_num_rows (string result); Devuelve el numero de fllas del resultado de una consulta, Ver también: mysql_db_query, mysql_query and, mysql_tetch_row.query, mysql_query and, mysql_tetch_row. mysql_pconnect “ password) ); mysal_peonn username] , stri Devuelve: A positive MySQL persistent link identifier on success, or false on error Devuelve un Identificador de conexién persistente 0 ‘false’ en caso de error. Las diferencias con respecto a mysq|_connect( ) son: ‘* Primero, la funcién intenta encontrar una conexién persistente que ya esté ablerta con la misma maquina, usuario y password. Si es encontrada, devuelve el identificador de la misma, en lugar de crear una nueva conexién. ‘© Segundo, la conexién al servider SQL no sera cerrada cuando finalice la ejecucién del script, sino que permanece ablerta para un uso posterior. La funclon mysql_close no clerra una coneccién ablerta con mysql_pconnect. Las conecclones ablerta con esta funcién se llaman "persistente: mysql_query int mysql_query (3 g query, ink_identéfier] Ejecuta una consulta a la base de datos activa en el servidor asociado al Identificador de conexién. SI no se especitica, se utiliza la ultima conexién ablerta.tica, se utiliza la ultima conexién ablerta. Sino hay conexiones ablertas la funcion Intenta establecer una. Esta funcion devuelve TRUE o FALSE para Indicar si las operaciones UPDATE, INSERT 0 DELETE han tenldo éxito. Para la operacién SELECT devuelve un nuevo Identificador de resultado. Ver también: mysql_db_query, mysql_select_db, and mysql_connect. mysql_result int mysql_result (int result, int row, mixed field); Devuelve el contenido de la celda de un resultado. E! argumento ‘field’ puede ser un indice o el nombre del campo correspondiente o el nombre del campo de la forma: tabla.campo. Si la columna tiene un alas (‘select foo as bar trom...’) se utiliza el alias en lugar del nombre de la columna. En lugar de esta tuncién es preferible usar mysql_tetch_row(), mysql_fetch_array(), and mysql_fetch_object(), con la que obtendremos mejor rendimiento. ‘Tutorial de PHP y MySQL (LUCAS) Pagina 36 de 54 mysqi_select_db mysql_select_ab( ing database_name, int [link identifier] }; Devuelve: true on success, false on error Establece la base de datos activa en el servidor. Si no se especitica identificador de conexién se utiliza la ultima conexién abierta. Sino hay conexiones anexién ablerta. Si no hay conexlones activas, la funcién intenta establecer una. A partir de la llamada a mysql_select_db las llamadas a mysql_query( ) actuan sobre la nueva base de datos activa. Ver también: mysql_connect, mysq|_pconnect, and mysql_query mysql_tablename nysql_tablenane (int resu ant iy; ‘Toma como argumento un puntero devuelto por la funcién mysql_list_tables( ) y devuelve el nombre de la tabla asoclada al Indice |. La funcién mysql_num_rows( ) puede ser utllizada para determinar el numero de tablas. coon S1ink = myeql_connect ("localhost", "nobody") ; mysql_select_db(*nydb", $1ink); Sresult = mysql_query ("SELECT * FROM agenda", 5 €cho "Nombre: *:mysql_result ($result, 0, "nombre*) "
"; echo "Direccién: *.mysql_result ($result, 0, "direccion") ." En la primera linea del script nos encontramos con la funcién mysql_connect (), que abre una conexién con el servidor MySQL en el Host especificado (en este caso la misma maquina en la que esta alojada el servidor MySQL, localhost). Tamblén debemos especificar un usuario (nobody, root, etc. }, y si fuera necesarlo un password para él ‘Tutorial de PHP y MySQL (LUCAS) Pagina 37 de 54 usuario Indicado (mysql_connect "localhost", "root", "clave del_root™)). Sila conexion ha tenido éxito, la funcl6n mysql_connect () devuelve un identificar de dicha conexién (un ndmero) que es almacenado en la variable SLink, sino ha tenido éxito, devuelve 0 (FALSE) Con mysqi_select_db() PHP le dice al servidor que en la conexién $1ink nos queremos conectar a la base de datos mydb, Podrlamos establecer distintas conexiones a la BD en diferentes servidores, pero nos conformaremos con una. La sigulente funcion mysql_query (), es la que hace el trabajo duro, usando el Identiicador de la conexién (S1ink), envia una instruccién SOL al servidor MySQL para que éste la procese. El resultado de ésta operacién es almacenado en la variable $result. Finalmente, mysql_result () es usado para mostrar los valores de los campos devueltos por la consulta ($result). En este ejemplo mostramos los valores del registro 0, que es el primer registro 0, que es el primer registro, y mostramos el valor de los campos especiticados. Antes de seguir con PHP, vamos a preparar la base de datos (BD) que vamos a utilizar como ejemplo. Como servidor de BD, usaremos MySQL un pequefio y compacto servidor de BD, Ideal para pequefas y medianas aplicaciones. MySQL soporta el estandar SQL (ANSI), y ademas est disponible para distintas plataformas, incluido las "windows" disponible para distintas plataformas, Incluido las "windows" Una vez Instalado MySQL, vamos a crear nuestra 8D ejemplo. MySQL utiliza una tabla de permisos de usuarlos, por defecto, en la instalacién crea el usuario root sin password. Debes crear distintos usuarlos con distintos permisos. Entre ellos, el usuario administrador de MySQL, con todos los permisos, y como recomendacién de seguridad, el usuarlo nobody solo con el permiso de consultar (SELECT), que es el que utllizaremos para conectarnos al servidor de BD en nuestros script Vamos a ver dos formas de crear una base de datos y sus tablas. Para ello vamos a crear la base de datos que nos servira de ejemplo en capitulos siguientes: 1, Linea de comandos Para crear nuestra base de datos en sistemas Linux/Unix, debemos ser el administrador de MySQL o tener el permiso pertinente para crear bases de datos, para ello haremos io sigulente: mysqladnin create ny Ya hemos creado una 8D, ahora le afadiremos una tabla y algunos registros, para lo cual copia el sigulente texto y salvalo en un archivo, que podriamos llamar mydb.dump. Crear tabla mybd CREATE TABLE agenda (id INT NOT Nl telefono CHAR(15), email CHAR ( INSERT INTO agenda VALUES (0, angagenda.con* INSERT INTO agenda VALUES (1, Nluistagenda.con' )\g INSERT ida VALUES (2, tearlostagenda.con’ )\g INCREMENT, nombre CHAR(50) , di Dg "C/ Laguna, 1! sevilla’, Debemos tener en cuenta que los comandos de arriba debe escribirse cada uno en una sola linea. Se han separado para aumentar la legibllidad del codigo. Ahora desde la linea de comandos ejecuta: mydb.dump | mysql myab ‘Tutorial de PHP y MySQL (LUCAS) Pagina 38 de 54 Cabe destacar el campo Id, que no puede estar vaclo, y ademas es auloincrementable, lo cual deberemos tener en cuenta a la hora de actualizar y afadir registros. SI no hemos cometido ningun error, ya tenemos nuestra base de datos de ejemplo en el servidor MySQL. Mysau. 2. Seript Una seguna forma de crear las bases de datos y tablas es utilizar las funclones que para ello nos da PHP. Para crear una base de datos tenemos dos opciones, una utilizar la funcién mysql_create db(), 0 bien enviado una consulta SQL con la Intruccién "CREATE DATABASE mydb". Como ejemplo vamos a crear un script crear_my.php que crear la anterlo base de datos. schemi> body> ‘<2PHP define ("CONSTANTE’ printf (CONSTANTE) ; Sbasedatos = “mydb"; //conectames con el servidor $Link = @mysqi_connect (*localhost™, "root", °"); "Hola Mando"); // comprobanes que hemos estabecide conexién en el servider £ () S1ink) ( echo "

ERROR: Inposible establecer coneccién con el servidor

"; : // obtenenes una lista de las bases de datos del servidor Sdb = mysql_list_dbs(); // wemos cuantas BD hay Snum_bd = mysql_num_rows (Sab); //comprobanos si la BD que quermos crear exite ya No" SicSnumbd; $4 Af (mysqi_dbname (Sab, $4) Sexiste = "SI" ; break; i Sbasedatos) { /{ si no existe 1a creanos (existe == "No") { manera 1 */ Af (1 mysql_create_db(Sbasedatos, Slinky) { echo "

ERROR 1: Imposible crear base de datos"; 7* class="codigo" style="margin-left: 50"> /* manera 2 Af (1 mysql_query ("CREATE DATABASE Sbasedatas™, $1ink)) echo "

ERROR2: Inposible crear base de datos per , // craamos 1a tabla Seql = "CREATE TABLE agenda ("; Seql .= "id INT NOT NULL AUTO_INCREMENT, *; $sql jombre CHAR(50), "; $sql -= "direccion CHAR(100), "; $sql $sql $sql elefono CHAR(I5), " mail CHAR(S0), ") BY (id) ) " ‘Tutorial de PHP y MySQL (LUCAS) Pagina 39 de 54 (emysql_ab_au echo "h2 ali pen echo "

La tabla se ha creado con éxito , Importar bases de datos desde MS Access Un caso muy comin, como en mi caso, al comenzar a utilizar MySQL, necesitaba migrar mis bases de datos Access de mi sistemas Windows a MySQL en Linux. La soluci6n a este problema, nos la aporta un médulo creado por Pedro, Freire de CYNERGI. Los pasos que debemos seguir para instalar este médulo, y su posterior uso son: 1. Abre el archivo de Access mdb que deseas exportar. 2. Ena ventana de objetos de la BD selecciona "Médulos", y después en "Nuevo' 3. Entonces se te abrira una ventana nueva, borra todo texto (cédigo) que haya escrito 4. Copia todo el texto del archivo de Pedro Freire y pégalo en el nuevo médulo, 5. Cierra la ventana de cédigo del médulo, selecciona que "Si" desea guardar los cambios y nombra el médulo (p.e. "MexportSQL’). El médulo es ahora parte de tu base de datos Access. 6. Vuelve a abrir el médulo, 0 pincha con el ratén en "Disefio" con nuestro nuevo médulo seleccionado. Mueve el cursor hasta donde aparezca la primera palabra “Function”, y presiona F5 0 selecciona "Ejecutar” en el mend. La ejecucién del modulo nos creara dos archivos (esql_add.txt y esql_del.txt) en el directorio C:/temp (el que trae por detecto, pero lo podemos cambiar). A nosotros el archivo que nos interesa es esql_add.txt, el cual como mejor nos parezea deberemos llevarnoslo a nuestra maquinaezca deberemos llevarnosio a nuestra maquina Linux. Ahora solo tenemos que seguir los paso que explicamos en el capitulo anterlor (Comenzando con MySQL). Primero creamos la base de datos: mysqladmin create mybd Y después volcamos los datos y en la nueva base de datos: eegl_add.txt | mysql mybd Mostrar los datos de una consulta Mostrar los datos de una consulta Ahora que ya sabemos conectar con el servidor de BD, veremos como mostrar los datos por pantalla. Consulta de la BD locaihos ) Tnobody"odigo">$1ink = mysql_connect ("lecalhost*, "nobody") Sresult = mysql_query ("SELECT nombre, email Fi echo " \n"; echo "ete> \n"y echo " \n"; whi agenda", SLink); ‘Tutorial de PHP y MySQL (LUCAS) Pagina 40 de 54 echo T \a" echo " \n"; echo " \n" echo " \n"; , echo "
Nont echo "E-Mail echo "
$row [0] Srow[1]
\n" En este script hemos introducido dos novedades, la mas obvla es la sentencia de control whiie(), que tiene un funcionamiento similar al de otros lenguajes, ejecuta una cosa mientras 1a condicién sea verdadera. En esta ocasién while() evalua la funcién mysql_fetch_row(), que devuelve un array con el contenido del registro actual (que se almacena en $row) y avanza una posicién en la lista de registros devueltes en 1a consulta SOL. La funcién mysqi_¢etch_row() tlene un pequeno problema, es que el array que devuelve solo admite referencias numéricas a los campos obtenldos de la consulta. El primer campo referenciado es el 0, el segundo el 1 y asi sucesivamente. En el sigulente script soluclonaremos este pequefio Inconveniente. Consulta modificada de BD “ \n"; echo " \n"; echo "

NonbreE-Mail" $row [nonbre"] "" $row ["email"]."
style="nargin-left: 50">echo " \n"; ) else ( echo "; La base de datos esté vacia 1"; ) > Esenclalmente, este script hace lo mismo que el anterior. Almacenamos en $row el registro actual con la funcién mysql_fetch_array() que hace exactamente lo mismo que mysql_fetch_row(), con la excepcién que podemos referenciar a los campos por su nombre ($row{"emai1"}), en vez de por un numero. Con la sentencia if/etse, asignamos a $row el primer registro de la consulta, y en caso de no haber ninguno (e1se) mostramos un mensaje ("No se ha encontrado..."). Mientras que con la sentencia do/whie, nos aseguramos que se nos muestren todos los registros devueltos por la consulta en caso de haber mas de uno. Hay que destacar la utllizacién del punto (.), como operador para concatenar cadenas. Un buscador para nuestra base de datos ‘Tutorial de PHP y MySQL (LUCAS) Pagina 41 de 54 Vamos a ver una aplicacion, un ejemplo, de todo lo visto hasta ahora, Escribiremos un script que siiva para buscar una determinada cadena (que recibiremos de un formulario, y la almacenamos en la variable Sbuscar), dentro de nuestra base de datos, concretamente dentro del cam po "nombre". ‘campo "nombre" En primer lugar escribiremos el texto HTML de la pagina web que nos servira como formulario de entrada, la Hamaremos formulario.htm: Formulario entrada schemi> Palabra clave: 20">cbe> El sigulente script de busqueda lo llamaremos buscador.php3, y ser4 el encargado de hacer la busqueda en la BD, y devolver por pantalla los registros encontrados. Script busqueda schemi> nt echo "

Volver

\a"; echo " \n"y : SLink = mysql_connect ("localhost", nobody’ mysql_select_db(*nydb", $1ink); $sql = "SELECT © FROM agenda WHERE nombre LIKE '4$bu: Sresult = mysql_query ($sql, $1ink); if ($row = mysql_fetch_array ($result) ) ( echo " \n"; /MMostramos los nombres de las tablas echo " \ndigo" style="margin-left: 50” mysql_field_seek ($result, 0); while ($field = mysql_fetch_field(Sresult)) { echo " \n"7 8" ORDER BY nombre"; ‘echo ce \n" ) echo " \n" do 4 echo " \n"y echo " \n"y echo " \n" echo Srow["direccion"] : echo Srow ("telefono") « echo hreg='mailto:".Srow("email*] . Srow["email"] ." \n echo " \n" ) while (row = mysql_fetch_array (Sresult)); echo "

Volver

\a" echo "
$field-sname
". Srow(Mid] " .Srow{"nombre"] ."
\n"; } else echo "

;No se ha encontrado ningin registro!

\n"; echo "

Volver

\a" ‘Tutorial de PHP y MySQL (LUCAS) Pagina 42 de 54
Lo primero que comprobamos es que el contenido de la variable $buscar que recibimos del la pagina web formulario.htm no es una cadena vacia, y esto lo hacemos con la funcién isset () que devuelve 'talso’ sila variable que recibe esta vacia. A la funcién le anteponemos el signo admiracion (1) que es equivalente a un Nor, para convertirio en ‘verdadero’ en caso de que la variable esté vacia, y en es caso terminamos la ejecucién del script con exit. Lo mas importante de este script, es sin duda la sentencla SQL que le enviamos al servidor MySQL, y mas ‘concretamente la condicion que le Imponemos, WHERE nombre LIKE ‘$$buscars'. Con la sentencia LIKE buscamos ‘cualquier ocurrencia de la cadena contenida en Sbuscar, mientras que con los signos de porcentaje (*) indicamos el lugar de la coincidencia, por ejemplo, si hublesemos puesto nombre LIKE '%$buscar', buscarlamos cualquler ocurrencia al final del campo"nombre", mientras que si hublesemos puesto nombre LIKE 'Sbuscars', buscarlamos ‘cualquier ocurrencia al principlo del campo “nombre” Las altimas novedade que hemos Incorporado, son las funciénes mysql_fetch field(), con el que obtenemos Informacion acerca de las caracteriticas de cada campo, como su nombre, tipo, longitud, nombre de la tabla que los contlene, etc. Pero para ejecutar la funcion anterior debemos colocar el puntero en el primer campo, y eso lo logramos con la funcién mysql_£ield seek (), la cAl mueve el puntero interno a la posicién indicada. Afiadir registros En esta lecclon vamos ver como podemos afladir nuevos registros a nuesta BD. La recogida de datos la vamos a hacer a traves de un intertaz de web. En primer lugar vamos a crear una pagina web con un simple formularlo, con los campos que deseamos. Formulario Inicial afiadir BD mi> Nombre : ‘Tutorial de PHP y MySQL (LUCAS) <7hEaI> Como se puede ver, para introducir un nuevo registro, utllizamos la ya conocida funcién mysql_query () también usamos para las consultas, y usaremos para las actualizaciones, es decir una sefiora funcién. jAaah!, una cosa muy importante, para poder afadir o modificar registros debemos tener permiso para ello en el servidor MySQL, por eso en este caso me conecto como root, pero podria ser cualquler otro usuario. Para terminar esta leccién, una pequefa trivolidad, vamos a combinar la pagina web de formulario y el tichero de script php3, en un solo tichero que llamaremos add_reg.php3 (este script no lo comentaré, lalgo tendran que hacer ustedesjo tendran que hacer ustedesi) Combinacion de formulario y script schemi> nombre">
Textequo>Direceiéni
Email Aceptar informacién"> email Pagina 43 de 54 sdireccion">
‘Tutorial de PHP y MySQL (LUCAS) Pagina 44 de 54 ‘O bien, Modificar registros opcion & schemi> Borrar registros El proceso de borrar un registro es Identico al de modificar, solo que en vez de utilizar UPDATE utllizamos DELETE en la sentenica SQL. Por tanto el script quedaria como sigue. Borrado registros de BD schemi> Todo a la vez Como resuemen de todo Io visto hasta ahora, vamos a hacer un script donde se mezcla todo, y algo nuevo. Como elercico, os dejo que la incorporacién del buscador de la lecci6n 5, schemi> ") ‘Tutorial de PHP y MySQL (LUCAS) 7 // Bnviamos 1a sentencia SQL al servidor DB Sresult = mysql_query($sal); } elseif (Sdelete) ( V/ Borramos un registro Seql = "DELETE FROM agenda WHERE 4 Sresult = mysql_query ($sql); Echo "Registro Borrado

"; } else /* Esta parte se ejecuta sino hemos presionado el boton enviar, es decir no veninos de un formulario */ ie (sia) J/ Mostramos todos les registros de nuestra BD Pagina 45 de 54 Sresult = mysql_query ("SELECT * FROM agenda", $link)ot;SELECT * FROM agenda", $Link); while (Smyrow = mysql_t ‘et ch_array (Sresult)) © Smyrow[*nonbre*] = $myrow[email"]; 10 "AAadir un registro

ep>

jonbre" valu enivar" value: inviar Informacién"> jea*>Borrar"; -<2php echo §nombre ?>">
<2php echo Sdireceion ">
value="<2php echo Semail 2>">
Sebr> Cabe destacar el uso de $PHP_SELF, esta es una funcion Interna de PHP que nos devuelve la direccién del script en el que se ejecuta. Instalacién de MyODBG En este capitulo describiremos el proceso de instalacién del driver MyODBC ODBC 32 bits para Windows 9x y Windows NT. Gracias a este driver podremos acceder desde un cliente Windows, con MS Access por ejemplo, a un servidor remoto MySQL. Lo primero que debemos hacer es conseguir el driver MyODBC mas reciente, y para ello que mejor que podemos hacer es dirigirnos a la web de MySQL. ‘Tutorial de PHP y MySQL (LUCAS) Pagina 46 de 54 Una vez que tenemos el programa en nuestro ordenador (cliente Windows), ejeculamos él programa de instalacion, Setup. Cees La caja de dialogos de la Instalaci6n (Install Drivers) permite escoger diversos drivers ODBC para Instalar, pero MyODBC solo da como opcién el driver para MySQL, el cual selecclonaremos. Una vez que el driver ODBC para MySQL ha sido instalado, Ia sigulente caja de didlogos nos pide contigura el origen de la base de datos a conectar. Dentro de la caja de didlogos Data Source, elegimos el botén Add, para afadir un nuevo origen de datos. ens Peas eee ees Excel Files (Microsoft Excel Di FoxPto Files - Word (Microsoft FoxPro VFP Driver (~ dbf) IMS Access Database (Microsoft Access Driver (“mdb)} Visual FoxPro Database (Microsoft Visual FoxPro Driver) ‘Tutorial de PHP y MySQL (LUCAS) ‘A continuacién selecclonamos él driver ODBC correspondiente al de la base de datos a la cual nos vamos conectar, en nuestro caso MySQL. ers Select which ODBC driver you want to OK use fiom the list, then choose OK. Installed ODBC Drivers: Microsoft FoxPro VFP Driver (dbf) Microsoft ODBC for Oracle Microsoft Paradox Driver ("db ) Microsoft Text Driver ("t: csv) Microsoft Visual FoxPro Driver SUL Server = Yes este momento cuando nos aparece el cuadro de contiguracién de nuestra conexién. Contiguracion: ‘windows DSN name: FSERVIDOR documentos | recttro 053 | SQL command on cornect: [ —S—ti<‘CS~S~CS UUptons that afects the behaviour of MyODBE T Don't optimize column width [~ Pad CHAP to full lenath T Reummatchng rows 7 Retun tabi nanes in SQLDeseibeCol 1 Trece M/ODEC Use compressed pratacol F Allow BIG results: 7 Ignore space afer function names T Dont prompt on camnect 7 Force use of naned pines T Sinuate 008C 1.0 T Change BIGINT cotanns to INT 7 lanore tin ttiable T No catalos [exp] TF Use manager cursers [exp] [~ Read options from C:\my.cnt T Don't use setocale I Safety (Check this it you have problems} canes Windows DNS name: es el nombre que nosotros le daremos a la conexién. MySQL host (name or IP) ‘queremos conectar. Usar preferentemente la direccion IP. MySQL database name: nombre de la base de datos MySQL a la que nos queremos conectar. User: nombre de usuario, Password: clave del usuarlo. Pagina 47 de 54 es el nombre (www.miservidor.com) 0 direcci6n IP del servidor al cual nos ‘Tutorial de PHP y MySQL (LUCAS) Pagina 48 de 54 ‘© Port: puerto que usaremos en la conexion, generalmente es el 3306. Si es otro es necesarlo especiticario. Notas: Con MyODBC no podemos utilizar los campos Acces de tipo BINARY Los parametrY Los parémetros de configuracién pueden ser modificados en el menu ODBC del Panel de Control de Windows ox/NT Para realizar la conexién a nuestra base de datos MySQL podemos utilizar el programa MS Access. Es necesarlo activar la opclén "Allow big results" para evitar problemas con los campos de tipo TEXT. Los usuarios de MS Access 2.0 deben activar la opcion “Simulate ODBC 1.0" Conexion remota a MySQL con MS Access Vamos a ver como conectarnos a una base de datos MySQL que esta en un servidor remoto mediante un cliente Windows con MS Access. Para ello deberemos tener instalado en nuestro cliente Windows el driver MyODBC. Lo primero, es lo primero, arrancar MS Access, después en el menu "Archivo", pinchamos en “Abrii nos abre la, pinchamos en "Abrir™, con lo que se nos abre la caja de dialogos *Abrir’ y en campo " selecclonamos "ODBC Databases" , con lo que se Ipo de archivo" core [Sie ed |X CDs teromete LoY | entree tno: conarvee Ahora debemos selecclonar el orlgen de los datos (la conexién) al que nos vamos a conectar, pinchamos en la lengeta de "Origen de datos de equipo" y escogemos el "Windows DNS name" que blen creamos en la Instalacion de MyODBC o desde el Panel de Windows en "Control en Fuente de datos ODBC’ ‘Tutorial de PHP y MySQL (LUCAS) Sin ros BASE Fles Excel Files FoxPro Fles - Word Ms Access Databare lasers ‘Voual FosPra Database Usuario Usvatio Usuario Usuario Usuario Usuario Pagina 49 de 54 Una vez realizada la conexién a nuestra base de datos remota MySQL, debemos escoger las tablas a vincular. Si las tablas no tienen una clave primarla, MS Access nos pedir que elllamos una, sino escogemos ninguna no podremos realizar modificaciones sobre la tabla, ‘Tutorial de PHP y MySQL (LUCAS) Pagina 50 de 54 2] conte | Cancelar Para asegura a irtegridad de los datos y para ‘actualzar regstros, debe elegt ura o varios campos due identfiquen de Forma exclusiva cada reaistro, Seleccione hasta dez reglstros, Pues bien ya tenemos nuestra conexién establecida. Cabenemos nuestra conexién establecida. Cabe que recordar que para poder modificar las tablas hay que tener los permisos pertinentes como usuario de MySQL. Tre fs [-[o[xJ ‘rear una tabla ullzendo el asistente Crear una tabla introduciendo datos decumentacion tecnica tipo Exportar un tabla MS Access @ MySOL Veamos como exportar una tabla de una base de datos MS Access a otra base de datos remota MySQL mediante pee. Una vez ablerta la base de datos origen con MS Access, seleccionamos la tabla y en el menu Archivo pinchamos en Exportar, ‘Tutorial de PHP y MySQL (LUCAS) Pagina 51 de 54 Obtener dt (eer ecs Gurdercomey ED twel fous Selecclonamos la conexi6n ODBC a la base de datos MySQL. ‘Tutorial de PHP y MySQL (LUCAS) Pagina 52 de 54 See ee eBASE Files Usvaio Encal Fes Usvatio FoxPro Fles “Word Usvaio Ms Access Databare usvaio Usvaio SERVIDOR-documentas — Usvaio VievalFoxPt0 Database Usvatia Yya esta todo. Importar tablas desde MySQL a MS Access Veamos como hacer para importa una tabla desde una base de datos MySQL en un servidor remoto via ODBC a una base de datos MS Access. Lo primimero que debemos hacer es abrir con MS Access la base de datos a la cual queremos Importar la tabla. Pichamos el bot6n de Nuevo y en cuadro de dialogo que se nos abre, seleccionamos "I mportar tabla”. En el sigulente cuadro de dialogo en el campo Tipo de archivo selecclonamos ODBC DataBases. ‘Tutorial de PHP y MySQL (LUCAS) Pagina 53 de 54 Selecclonamos nuestra conexlon ODBC. BASE Fles Usuario Excel Files Usvatio FoxPro Fles - Word Usuario Ms Access Databare Usuario Usuario Vioual FosPra Database Usuario Ya solo nos resta escoger las tablas a importar. ‘Tutorial de PHP y MySQL (LUCAS) Pagina 54 de 54 rcs

También podría gustarte