34
5/23/2018 ProgramacionAplicacionesMySQLConC-slidepdf.com http://slidepdf.com/reader/full/programacion-aplicaciones-mysql-con-c 1/34

Programacion Aplicaciones MySQL Con C

Embed Size (px)

Citation preview

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    1/34

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    2/34

    Programacin de aplicaciones MySQL con C

    En este documento se da una introduccin al uso del API C que proporciona MySQL para eldesarrollo de aplicaciones.

    Autor: Jorge Jess C!urruca

    "ec!a pu#licacin: $$ Junio del $%%&

    Acerca de esta gua

    Este documento pretende ser no slo una traduccin del original 'el cual (iene )unto almanual de MySQL*+ sino tam#i,n+ un agregado con me)oras+ resmenes+ m-s e)emplos decdigos+ eplicaciones m-s detalladas+ y las p-ginas /man/ de las 0unciones m-s importantes'que no (ienen con el original*+ etc.+ para !ac1ers de MySQL. Actualmente se !an omitidoalgunas cosas+ agregado otras+ y se !an !ec!o (arios resmenes de di0erentes documentos

    para agregarlos al que se est- leyendo en este momento. 'En esta primera (ersin 0altanmuc!as cosas por !acer+ las cuales saldr-n pu#licadas en la segunda re(isin*

    Cosas por hacer

    Agregar mas cdigos de e)emplo. 2erminar de traducir algunas cosas que 0altan. 3acer re(isiones 4 correcciones al documento actual.

    5ota: las cosas que 0altan se muestran en detalle al 0inal de este documento.

    Crditos

    [Documento fuente principal

    6 MySQL A76 e6mail : in0o8mysql.com6 9e# : !ttp:44999.mysql.com

    [Primer encargado del proyecto! traducciones! re"isiones! p#ginas man

    6 Jorge Jess C!urruca /s!oc1 dude/6 email : ))c!8ers.com6 email : ))c!8#a!ialug.com.ar

    6 9e# : !ttp:44))c!.#a!ialug.com.ar

    [Segundo encargado del proyecto! traducciones! re"isiones! cdigo

    6 Eduardo ;arate6 email : eduardo8mysql6!ispano.org6 9e# :

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    3/34

    [$tros cola%oradores! traducciones! ideas

    6 Luciano "aletti6 email: luciano#ello8!otmail.com

    6 Lisandro >amian 5icanor Pere Meyer6 email: peremeyer8in0o(ia.com.ar

    6 email: Pa#lo /;om#ie/ ?dorico6 om#ie8#a!ialug.com.ar

    &ntroduccin al AP& CEl cdigo del API C de MySQL es distri#uido en la li#rer@a mysqlclient que (iene en el

    paquete MySQL+ y le permite a los programas en C acceder a #ases de datos MySQL.

    esulta etremadamente tri(ial usar este API+ ya que por lo nico que el programador de#epreocuparse es por conocer /las estructuras/ que est-n creadas dentro de esta li#rer@a y porlos (alores de retorno de algunas otras 0unciones. Son todas estructuras de las cualespodemos !acer uso 'llenarlas 4 modi0icarlas* desde programas eternosB para m-sin0ormacin se le puede ec!ar un (istao al cdigo 0uente de /mysql.!/ y mysqlclient. ' El APIMySQL pro(ee (aria#les+ 0unciones y estructuras listas para usar o llamar desde otrosprogramas+ aunque por a!ora lo nico que nos interesa es: para qu, sir(e cada 0uncin+ yque (alores retornan.*

    Muc!os otras APIs 'ecepto la del connector4J* usan la li#rer@a mysqlclient para comunicarsecon el ser(idor MySQL+ esto signi0ica que por e)emplo+ se puede tomar (enta)as de algunas(aria#les que son usadas por otros clientes ya que ,stas son re0erenciadas desde la li#rer@aprincipal.

    El cliente tiene un #u00er de comunicacin con un tamao m-imo. El tamao del #u00er queest- esta#lecido inicialmente 'DF7* es autom-ticamente incrementado al m-imo 'DM*.Como el tamao de los #u00ers es incrementado slo cuando esto se demanda+ alincrementar el l@mite m-imo de0inido no causa que m-s recursos sean usados. Este controldel tamao es m-s un control para consultas errneas y paquetes de comunicacin.

    El #u00er de comunicacin de#e lo su0icientemente grande para contener un sencillasentencia SQL 'para el tr-0ico cliente6ser(idor* y una 0ila de datos de(ueltos 'para el tr-0icoser(idor6cliente*. Cada #u00er de comunicacin de un t!read es din-micamente incrementadopara mane)ar cualquier consulta o 0ila arri#a del l@mite m-imo. Por e)emplo+ si se tienen(alores 7L?7 que contienen m-s de DM de datos+ se de#e tener un l@mite de #u00er decomunicacin de al menos DM 'en am#os+ cliente y ser(idor*. El m-imo de0inido por de0aultpara el cliente es de DM+ pero el del ser(idor es de DM. Sin em#argo+ este (alor puede serincrementado al cam#iar el (alor del par-metro maGallo9edGpac1et cuando se inicia elser(idor MySQL.

    El ser(idor MySQL disminuye cada #u00er de comunicacin a netG#u00erGlengt! luego decada consulta. Para los clientes+ el tamao del #u00er asociado con una conein no esdisminuido !asta que la conein es cerrada+ en el momento en que la memoria del clientees reclamada.

    En este documento no se incluye in0ormacin so#re cmo construir programas que !agan

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    4/34

    uso de !ilos 't!reads*+ sin em#argo+ s@ se comentar- algo so#re la construccin deaplicaciones standalone con el uso de la li#rer@a mysqld. Estas aplicaciones incluyen elser(idor y el cliente en el mismo programa+ por lo que no se comunican con un ser(idorMySQL eterno.

    'ipos de datos

    Antes de comenar con la descripcin de las 0unciones+ (amos a re(isar #re(emente algunosde los tipos de datos que 0orman parte del API C de MySQL+ mismos que son usadosampl@amente en la creacin de programas.

    M(SQL

    Esta estructura es la m-s importante y m-s usada+ ya que es la que mane)a una conein ala #ase de datos. Es usada por casi todas las 0unciones del API.

    M(SQL)*+S

    Esta estructura representa el resultado de una consulta que retorna 0ilas 'SELEC2+ S3?H+>ESCI7E+ EPLAI5*. La in0ormacin retornada desde una consulta se conoce como elcon)unto de resultados 'result set*.

    M(SQL)*$,

    epresenta una 0ila de datos. Actualmente es implementada como un arreglo de cadenas.'Sin em#argo estas cadenas tienen un tratamiento especial y no de#en ser consideradascomo cadenas terminadas en null*. Las 0ilas son o#tenidas al llamar a mysqlG0etc!Gro9'*.

    M(SQL)-&+LD

    Esta estructura contiene in0ormacin so#re el nom#re+ tipo y tamao de un campo. Los(alores de los campos no son parte de esta estructuraB ellos son contenidos en unaestructura MSQLG?H. Las estructuras MSQLG"IEL> para cada campo se o#tienen alllamar a mysqlG0etc!G0ield'* repetidamente.

    M(SQL)-&+LD)$--S+'

    Es la representacin de un o00set dentro de una lista de campos. Kn o00set es el nmero deun campo dentro de una 0ila+ comenando en cero.

    my)ulonglong

    El tipo usado para el nmero de 0ilas y por mysqlGa00ectedGro9s'*+ mysqlGnumGro9s'*+ ymysqlGinsertGid'*. Este tipo pro(ee un rango de (alores de % a D.&eD. En algunos sistemas+el intentar mostrar un (alor del tipo myGulonglong no 0uncionar-. Para imprimir cada uno deestos (alores+ se de#e con(ertir a unsigned long y usa el 0ormato Nlu de print0.

    Por e)emplo:

    print0'/5mero de 0ilas: Nlu/+ 'unsigned long* mysqlGnumGro9s'result**B

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    5/34

    A continuacin se muestra como est-n de0inidos los tipos de datos presentadosanteriormente+ mismos que 0orman parte del cdigo 0uente de MySQL 'mysqlclient y mysql.!*.

    Para (er in0ormacin mas detallada se recomienda leer todos los 0ic!eros 0uente.

    M(SQL

    Estructura que mane)a la conein a una #ase de datos.

    typede0 struct stGmysqlO 5E2 netB 4 Par-metros de comunicacin 4 gptr connectorG0dB 4 Conector"d para SSL 4 c!ar !ost+user+pass9d+uniGsoc1et+ser(erG(ersion+!ostGin0o+in0oB c!ar d#B struct c!arsetGin0oGst c!arsetB

    MSQLG"IEL> 0ieldsB MEMG??2 0ieldGallocB myGulonglong a00ectedGro9sB myGulonglong insertGidB myGulonglong etraGin0oB 4 Ksado por mysqls!o9 4 unsigned long t!readGidB 4 Id para la conein en el ser(idor 4 unsigned long pac1etGlengt!B unsigned int portB unsigned long clientG0lag+ser(erGcapa#ilitiesB unsigned int protocolG(ersionB unsigned int 0ieldGcountB unsigned int ser(erGstatusB unsigned int ser(erGlanguageB unsigned int 9arningGcountB struct stGmysqlGoptions optionsB enum mysqlGstatus statusB myG#ool 0reeGmeB myG#ool reconnectB 4 Se 0i)a a D para reconein autom-tica 4

    c!ar scram#le

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    6/34

    myGulonglong ro9GcountB MSQLG"IEL> 0ieldsB MSQLG>A2A dataB MSQLG?HS dataGcursorB unsigned long lengt!sB 4 Longitudes de columnas para la 0ila 4 MSQL !andleB MEMG??2 0ieldGallocB unsigned int 0ieldGcount+ currentG0ieldB

    MSQLG?H ro9B MSQLG?H currentGro9B 4 #u00er para la 0ila actual 4 myG#ool eo0B 4 Ksado por mysqlG0etc!Gro9 4 const struct stGmysqlGmet!ods met!odsB MSQLGESB

    M(SQL)*$,

    La representacin de una 0ila de datos.

    typede0 c!ar MSQLG?HB 4 egresa datos como un arreglo de cadenas4

    M(SQL)-&+LD

    Estructura que contiene in0ormacin de los campos.

    typede0 struct stGmysqlG0ield O c!ar nameB 4 5om#re del campo4 c!ar orgGnameB 4 5om#re original del campo+ para los alias4 c!ar ta#leB 4 El nom#re de la ta#la que contiene este campo4 c!ar orgGta#leB 4 5om#re orig. de la ta#la+ si ta#la 0ue un alias 4 c!ar d#B 4 7ase de datos de la ta#la 4 c!ar catalogBc!ar de0B 4 El (alor por de0ault para este campo4

    unsigned long lengt!B 4 Anc!o del campo4

    unsigned long maGlengt!Bunsigned int nameGlengt!B unsigned int orgGnameGlengt!B unsigned int ta#leGlengt!B unsigned int orgGta#leGlengt!B unsigned int d#Glengt!B unsigned int catalogGlengt!B unsigned int de0Glengt!B unsigned int 0lagsB 4 >i0erentes #anderas para el campo 4 unsigned int decimalsB 4 5mero de decimales en el campo 4 unsigned int c!arsetnrB 4 Con)unto de caracteres 4 enum enumG0ieldGtypes typeB 4 2ipo del campo 4 MSQLG"IEL>B

    El tipo del campo puede ser uno de los siguientes:

    .alor Descripcin

    "IEL>G2PEG2I5 campo 2I5I52

    "IEL>G2PEGS3?2 campo SMALLI52

    "IEL>G2PEGL?5 campo I52EE

    "IEL>G2PEGI52$& campo ME>IKMI52

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    7/34

    "IEL>G2PEGL?5L?5

    campo 7II52

    "IEL>G2PEG>ECIMAL campo >ECIMAL ? 5KMEIC

    "IEL>G2PEG"L?A2 campo "L?A2

    "IEL>G2PEG>?K7LE campo >?K7LE or EAL

    "IEL>G2PEG2IMES2AMP

    campo 2IMES2AMP

    "IEL>G2PEG>A2E campo >A2E

    "IEL>G2PEG2IME campo 2IME

    "IEL>G2PEG>A2E2IME

    campo >A2E2IME

    "IEL>G2PEGEA campo EA

    "IEL>G2PEGS2I5 campo C3A

    "IEL>G2PEGTAGS2I5 campo TAC3A

    "IEL>G2PEG7L?7campo 7L?7 o 2E2'usar maGlengt! para determinar lalongitud maima*

    "IEL>G2PEGSE2 campo SE2

    "IEL>G2PEGE5KM campo E5KM

    "IEL>G2PEG5KLL campo tipo 5KLL

    "IEL>G2PEGC3A 'o#soleto* usar en su lugar "IEL>G2PEG2I5

    Se puede utiliar la macro ISG5KM'* para a(eriguar cuando un campo tiene un tipo

    num,rico. Se pasa el tipo a ISG5KM'* y ,sta retorna una (alor 2KE si el campo esnum,rico:

    i0'ISG5KM'0ield6Utype** print0'/El campo es num,rico/*B

    El (alor de las #anderas puede tener cero o m-s del siguiente con)unto de #its:

    .alor Descripcin

    5?2G5KLLG"LA El campo no puede ser 5KLL

    PIGFEG"LAEl campo es parte de la cla(e primaria 'primary 1ey*

    K5IQKEGFEG"LA El campo es parte de una cla(e nica

    MKL2IPLEGFEG"LA El campo es parte de una cla(e no nica

    K5SI5E>G"LA El campo tiene el atri#uto K5SI5E>

    ;E?"ILLG"LA El campo tiene el atri#uto ;E?"ILL

    7I5AG"LA El campo tiene el atri#uto 7I5A

    AK2?GI5CEME52G"LA El campo tiene el atri#uto AK2?GI5CEME52

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    8/34

    E5KMG"LA El campo es un E5KM 'o#soleto*

    SE2G"LA El campo es un SE2 'o#soleto*

    7L?7G"LA El campo es un 7L?7 o 2E2 'o#soleto*

    2IMES2AMPG"LA El campo es un 2IMES2AMP 'o#soleto*

    El uso de las #anderas 7L?7G"LA+ E5KMG"LA+ SE2G"LA+ y 2IMES2AMPG"LA eso#soleto porque ellas indican el tipo de un campo en (e de un atri#uto de su tipo. Elsiguiente e)emplo ilustra un e)emplo t@pico del uso de las #anderas:

    i0'0ield6U0lags V 5?2G5KLLG"LA* print0'/El campo no puede ser nulo/*B

    M(SQL)-&+LD)$--S+'

    La representacin de un o00set dentro de una lista de campos.

    typede0 unsigned int MSQLG"IEL>G?""SE2B 4 o00set para el campo actual 4

    *esumen de funciones del AP& C

    Las 0unciones disponi#les en el API C son resumidas aqu@ y eplicadas en mayordetalle en la siguiente seccin.

    -uncin Descripcin

    mysqlGa00ectedGro9s'*

    >e(uel(e el numero de 0ilascam#iadas4#orradas4insertadas por la ltimasentencia KP>A2E+ >ELE2E+ o I5SE2.

    mysqlGc!angeGuser'* Cam#ia de usuario y #ase de datos en una coneina#ierta.

    mysqlGc!aracterGsetGname'*

    >e(uel(e el nom#re del con)unto de caracteres porde0ault para la conein.

    mysqlGclose'* Cierra la conein con el ser(idor.

    mysqlGconnect'*Se conecta con un ser(idor MySQL+ a!ora esta0uncin es o#soleta+ se de#er@a usarmysqlGrealGconnect'* en su lugar.

    mysqlGcreateGd#'*Crea una #ase de datos. Esta 0uncin es o#soletaB

    usar en su lugar el comando CEA2E >A2A7ASE.

    mysqlGdropGd#'*7orra una #ase de datos. Esta 0uncin es o#solteaBusar en su lugar el comando >?P >A2A7ASE.

    mysqlGeo0'*>etermina cuando se !a le@do la ltima 0ila de uncon)unto de resultados. Esta 0uncin es o#soletaBusar en su lugar mysqlGerrno'* o mysqlGerror'*.

    mysqlGerrno'* >e(uel(e el nmero de error de la 0uncin MySQL

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    9/34

    in(ocada m-s recientemente.

    mysqlGerror'*>e(uel(e un mensa)e de error de la 0uncin MySQLin(ocada m-s recientemente.

    mysqlG0etc!G0ield'* >e(uel(e el tipo del siguiente campo en la ta#la.

    mysqlG0etc!G0ields'* >e(uel(e un arreglo de todos los campos.

    mysqlG0etc!Glengt!s'*>e(uel(e el largo de todas las columnas de la 0ilaactual.

    mysqlG0etc!Gro9 ecupera la siguiente 0ila del con)unto de resultados.

    mysqlG0ieldGsee1'*Pone el cursor de columna+ en una columnaespeci0ica.

    mysqlG0ieldGcount'*>e(uel(e el nmero de columnas para la consultam-s reciente.

    mysqlG0ieldGtell'*>e(uel(e la posicin del cursor de campo usado porel ltimo mysqlG0etc!G0ield'*.

    mysqlG0reeGresult'*Li#era la memoria usada por un con)unto deresultados.

    mysqlGgetGclientGin0o'*

    >e(uel(e la (ersin del cliente como una cadena.

    mysqlGgetG!ostGin0o'* >e(uel(e una cadena que descri#e la conein.

    mysqlGgetG(ersionGser(er'*

    >e(uel(e la (ersin del ser(idor como un (alorentero.

    mysqlGin0o'* >e(uel(e in0ormacin acerca de la consultae)ecutada m-s recientemente.

    mysqlGinit'* ?#tiene o inicialia una estructura MSQL.

    mysqlGinsertGid'*>e(uel(e el I> generado por una columna

    AK2?GI5CEME52 en la consulta pre(ia.

    mysqlGlistGd#s'*>e(uel(e los nom#res de las #ases de datos quecoinciden con una epresin regular sencilla.

    mysqlGlistG0ields'*>e(uel(e los nom#res de campos que coinciden conuna epresin regular sencilla.

    mysqlGlistGprocesses'*

    >e(uel(e una lista de los t!reads actuales.

    mysqlGlistGta#les'*>e(uel(e los nom#res de ta#las que coinciden conuna epresin regular sencilla.

    mysqlGnumG0ields'*>e(uel(e el nmero de columnas en un con)unto deresultados.

    mysqlGnumGro9s'* >e(uel(e el nmero de 0ilas en un con)unto de

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    10/34

    resultados.

    mysqlGoptions'*Con0igura opciones de conein paramysqlGconnect'*.

    mysqlGping'*Permite (eri0icar si la conein con el ser(idor est-0uncionando.

    mysqlGquery'* E)ecuta una consulta SQL.

    mysqlGrealGconnect'* Permite esta#lecer la conein con el ser(idor.

    mysqlGselectGd#'*Selecciona la #ase de datos so#re la que see)ecutar-n las consultas.

    mysqlGs!utdo9n'* Apaga el ser(idor MySQL.

    mysqlGstat'*>e(uel(e el status actual del ser(idor como unacadena.

    mysqlGstoreGresult'* ecupera un con)unto de resultados completamente.

    mysqlGuseGresult'*Inicia una recuperacin 0ila6por60ila del con)unto deresultados.

    Descripcin de funciones

    En la descripcin de las 0unciones que se !ar- a continuacin+ un par-metro con (alor deretorno 5KLL signi0ica null en el sentido de la programacin en C + y no un null deSQL4MySQL.

    Las 0unciones que de(uel(en (alores+ generalmente de(uel(en un entero o un puntero+ a noser que est, especi0icado de otra 0orma+ las 0unciones que retornan un puntero de(uel(en un(alor no nulo para indicar ,ito+ o un (alor nulo para indicar 0racaso y las 0unciones queretornan un entero de(uel(en cero para indicar ,ito o un (alor distinto de cero para indicar0racaso.

    esumiendo:

    Kna 0uncin que de(uel(e un puntero:

    Talor no 5KLL W ,ito Talor 5KLL W 0racaso

    Kna 0uncin que de(uel(e un entero:

    >e(uel(e % W ,ito >e(uel(e distinto de % W 0racaso.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    11/34

    mys/l)affected)ro0s12

    myGulonglong mysqlGa00ectedGro9s'MSQL mysql*

    Descripcin

    >e(uel(e el nmero de 0ilas cam#iadas por el ltimo KP>A2E+ eliminadas por el ltimo>ELE2E o insertadas por el ltimo I5SE2. Puede ser llamada inmediatamente despu,s demysqlGquery'* para sentencias KP>A2E+ >ELE2E o I5SE2. Para sentencias SELEC2+mysqlGa00ectedGro9s'* tra#a)a como mysqlGnumGro9s'*.

    .alores de retorno

    Kn entero mayor que cero indica el nmero de 0ilas a0ectadas o recuperadas. Cero indica queno se actualiaron registros para una sentencia KP>A2E+ no !u#o 0ilas que coincidieran conla cl-usula H3EE en la consulta o que la consulta no !a sido e)ecutada an.

    +rrores

    5inguno.

    +3emplo

    mysqlGquery'Vmysql+/KP>A2E productos SE2 costoWcostoD.$X H3EE grupoWD%/*Bprint0'/Nld productos actualiados/+'long* mysqlGa00ectedGro9s'Vmysql**B

    mys/l)change)user12

    myG#ool mysqlGc!angeGuser'MSQL mysql+ const c!ar user+const c!ar pass9ord+

    const c!ar d#*

    Descripcin

    Cam#ia el usuario y causa que la #ase de datos especi0icada por d%llegue a ser la #ase dedatos por de0ault en la conein especi0icada por mys/l. En las su#secuentes consultas+esta #ase de datos es la de0ault para la re0erencia a ta#las que no incluyen una #ase dedatos epl@cita.

    mysqlGc!anceGuser'* 0alla a menos que el usuario conectado pueda ser autenticado o si notiene permisos para usar la #ase de datos. En este caso el usuario y la #ase de datos no soncam#iados. El par-metro d%puede ser puesto a 5KLL si no se tiene una #ase de datos porde0ault.

    .alores de retorno

    Cero para ,ito+ y distinto de cero si ocurri un error.

    +rrores

    CGC?MMA5>SG?K2G?"GS5C+ el comando 0ue e)ecutado en un ordeninapropiado.

    CGSETEG?5EGE?+ el ser(idor MySQL no est- disponi#le. CGSETEGL?S2+ se perdi la conein al ser(idor durante la consulta.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    12/34

    CGK5F5?H5GE?+ ocurri un error desconocido. EGK5F5?H5GC?MGE?+ el ser(idor MySQL no tiene implementado el

    comando. EGACCESSG>E5IE>GE?+ el nom#re de usuario o la contrasea son

    incorrectas. EG7A>G>7GE?+ la #ase de datos no eiste.

    EG>7ACCESSG>E5IE>GE?+ el usuario no tiene los pri(ilegios para acceder ala #ase de datos.

    EGH?5G>7G5AME+ el nom#re de la #ase de datos es muy grande.

    +3emplo

    i0 'mysqlGc!angeGuser'Vmysql+ /usuario/+ /pass9ord/+ /nue(aG#aseGdeGdatos/**O

    0print0'stderr+ /"allo al cam#iar de usuario. Error: Ns /+mysqlGerror'Vmysql**B

    mys/l)character)set)name12const c!ar mysqlGc!aracterGsetGname'MSQL mysql*

    Descripcin

    >e(uel(e el con)unto de caracteres por de0ault para la conein actual.

    .alores de retorno

    El con)unto de caracteres por de0ault.

    +rrores

    5inguno.

    +3emplo

    Pendiente.

    mys/l)close12

    (oid mysqlGclose'MSQL mysql*

    Descripcin

    Cierra una conein a#ierta pre(iamente. mysqlGclose'* tam#i,n li#era el espacio ocupado

    por el mane)ador de conein apuntado por mys/l si el mane)ador 0ue asignadoautom-ticamente por mysqlGinit'* o mysqlGconnect'*.

    .alores de retorno

    5inguno.

    +rrores

    5inguno.

    +3emplo

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    13/34

    Pendiente.

    mys/l)connect12

    MSQL mysqlGconnect'MSQL mysql+ const c!ar !ost+ const c!ar user+ const c!ar pass9d*

    Descripcin

    2rata de esta#lecer una conein al ser(idor MySQL. 'Es me)or usar mysqlGrealGconnect'*en lugar de la 0uncin citada+ ya que est- quedando o#soleta.*

    .alores de retorno

    Los mismos que mysqlGrealGconnect'*.

    +rrores

    Los mismos que mysqlGrealGconnect'*.

    +3emploPendiente.

    mys/l)create)d%12

    int mysqlGcreateGd#'MSQL mysql+ const c!ar d#*

    Descripcin

    Crea la #ase de datos nom#rada por el par-metro d%. Esta 0uncin se est- quedandoo#soleta+ es pre0eri#le usar mysqlGquery para e)ecutar una sentencia SQL /CEA2E

    >A2A7ASE/..alores de retorno

    Cero si la #ase de datos 0ue creada con ,ito. >istinto de cero si ocurri algn error.

    +rrores

    CGC?MMA5>SG?K2G?"GS5C+ los comandos 0ueron e)ecutados en un ordeninapropiado.

    CGSETEG?5EGE?+ el ser(idor no est- disponi#le. CGSETEGL?S2+ se perdi la conein al ser(idor mientras se e)ecuta#a la

    consulta.

    CGK5F5?H5GE?+ ocurri un error desconocido.+3emplo

    i0'mysqlGcreateGd#'Vmysql+ /miG#aseGdeGdatos/**O

    0print0'stderr+ /"allo al crear nue(a #ase de datos. Error: Ns/+mysqlGerror'Vmysql**B

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    14/34

    mys/l)data)see412

    (oid mysqlGdataGsee1'MSQLGES result+ myGulonglong o00set*

    Descripcin

    7usca una 0ila ar#itraria en un con)unto de resultados. El (alor offsetes el nmero de una 0ilay de#e estar en el rango de % a mysqlGnumGro9s'stmt*6D. Esta 0uncin requiere que laestructura MSQLGES contenga el resultado completo de la consulta+ de esta maneramysqlGdataGsee1'* puede ser usado solo en con)uncin con mysqlGstoreGresult'*+ y no conmysqlGuseGresult'*.

    .alores de retorno

    5inguno.

    +rrores

    5inguno.

    +3emplo

    Pendiente.

    mys/l)de%ug12

    (oid mysqlGde#ug'const c!ar de#ug*

    Descripcin

    3ace un >7KGPKS3 con la cadena dada. mysqlGde#ug'* usa la li#rer@a de depuracin"red "is!. Para usar esta 0uncin+ se de#e compilar la li#rer@a cliente con soporte parade#ugging.

    .alores de retorno5inguno.

    +rrores

    5inguno.

    +3emplo La llamada mostrada aqu@ causa que la li#rer@a cliente genere un trace file en elarc!i(o 4tmp4client.trace de la m-quina cliente.

    mysqlGde#ug'/d:t:?+4tmp4client.trace/*B

    mys/l)drop)d%12int mysqlGdropGd#'MSQL mysql+ const c!ar d#*

    Descripcin

    7orra la #ase de datos nom#rada por el par-metro d%. Esta 0uncin est- quedando o#soleta+se recomienda usar mysqlGquery'* para e)ecutar una sentencia SQL />?P >A2A7ASE/.

    .alores de retorno

    Cero si la #ase de datos 0ue #orrada. >i0erente de cero si ocurri algn error.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    15/34

    +rrores

    CGC?MMA5>SG?K2G?"GS5C+ el comando 0ue e)ecutado en un ordeninapropiado.

    CGSETEG?5EGE?+ el ser(idor MySQL no est- disponi#le. CGSETEGL?S2+ se perdi la conein al ser(idor durante la consulta. CGK5F5?H5GE?+ ocurri un error desconocido.

    +3emplo

    i0'mysqlGdropGd#'Vmysql+ /miG#aseGdeGdatos/**0print0'stderr+ /"allo al eliminar la #ase de datos: Error: Ns/+

    mysqlGerror'Vmysql**B

    mys/l)eof12

    myG#ool mysqlGeo0'MSQLGES result*

    Descripcin

    El uso de esta 0uncin est- quedando o#soleto+ en su lugar pueden ser usadas mysqlGerrno'*o mysqlGerror'*. mysqlGeo0'* determina si la ultima 0ila de un con)unto de resultados !a sidole@da. Si se o#tiene un con)unto de resultados desde una llamada eitosa amysqlGstoreGresult'*+ el cliente reci#e el con)unto completo en una sola operacin. En estecaso+ si mysqlG0etc!Gro9'* regresa un (alor 5KLL signi0ica que el 0inal del con)unto deresultados !a sido alcanado y ya no es necesario llamar a mysqlGeo0'*. Cuando se usa conmysqlGstoreGresult'*+ mysqlGeo0'* siempre regresa (erdadero 'true*.

    Por otra parte+ si se usa mysqlGuseGresult'* para iniciar la recuperacin de un con)unto deresultados+ las 0ilas del con)unto son o#tenidas desde el ser(idor una por una cada (e que

    se llama a mysqlG0etc!Gro9'*. >e#ido a que puede ocurrir un error en la conein duranteeste proceso+ si mysqlG0etc!Gro9'* regresa un (alor 5KLL+ no signi0ica necesariamente queel 0inal del con)unto de resultados se !a alcanado. En este caso se puede !acer uso demysqlGeo0'* para determinar lo que sucedi. mysqlGeo0'* regresa un (alor distinto de cero sise llego al 0inal del con)unto y cero si ocurri un error.

    3istricamente mysqlGeo0'* antecede a las 0unciones de error est-ndar mysqlGerrno'* ymysqlGerror'*. Puesto que estas 0unciones de error proporcionan la misma in0ormacin+ suuso es pre0erido so#re mysqlGeo0'*+ la cual es a!ora desapro#ada.

    'En e0ecto+ las 0unciones de error proporcionan mas in0ormacin+ ya que mysqlGeo0'* regresasolo un (alor #ooleano mientras que estas 0unciones indican una ran para el error cuandoeste ocurre.*

    .alores de retorno

    Cero si no ocurre un error. >istinto de cero si el 0inal del con)unto de resultados !a sidoalcanado.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    16/34

    +rrores

    5inguno.

    +3emplo

    mysqlGquery'Vmysql+/SELEC2 "?M algunaGta#la/*Bresult W mysqlGuseGresult'Vmysql*B9!ile''ro9 W mysqlG0etc!Gro9'result***O

    44 3acer algo con los datosi0'YmysqlGeo0'result** 44 mysqlG0etc!Gro9'* 0all de#ido a un errorO

    0print0'stderr+ /Error: Ns/+ mysqlGerror'Vmysql**B

    Sin em#argo+ se puede o#tener el mismo e0ectto con las 0unciones de error est-ndar deMySQL:

    mysqlGquery'Vmysql+/SELEC2 "?M algunaGta#la/*Bresult W mysqlGuseGresult'Vmysql*B9!ile''ro9 W mysqlG0etc!Gro9'result***O

    44 3acer algo con los datosi0'mysqlGerrno'Vmysql** 44 mysqlG0etc!Gro9'* 0all de#ido a un errorO

    0print0'stderr+ /Error: Ns/+ mysqlGerror'Vmysql**B

    mys/l)errno12

    unsigned int mysqlGerrno'MSQL mysql*

    Descripcin

    Para la conein especi0icada por mys/l+ mysqlGerrno'* regresa el cdigo de error para la0uncin in(ocada m-s recientemente+ que puede 0allar o ser eitosa. Kn (alor de retorno iguala cero signi0ica que no ocurri ningn error. Los nmeros de mensa)es de error en el clienteson listados en el arc!i(o de ca#ecera Zerrmsg.!Z. Los nmeros de mensa)es de error en elser(idor son listados en el arc!i(o de ca#ecera ZmysqldGerror.!Z.

    En la distri#ucin del cdigo 0uente de MySQL se puede encontrar una lista completa de losmensa)es de error y sus correspondientes nmeros en el arc!i(o Zdocs4mysqlGerror.ttZ. Loscdigos de error en el ser(idor tam#i,n son listados en la seccin D%.D del manual deMySQL.

    5otar que algunas 0unciones como mysqlG0etc!Gro9'* no 0i)an mysqlGerrno'* si tienen ,ito.Kn principio a seguir es que todas las 0unciones que tienen que pedir in0ormacin al ser(idorreiniciar-n mysqlGerrno'* si tienen ,ito.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    17/34

    .alores de retorno

    Kn (alor de cdigo de error para la ultima llamada mysqlG'*+ si ,sta 0alla. Cero signi0icaque no ocurri ningn error.

    +rrores

    5inguno.

    +3emplo

    Pendiente.

    mys/l)error12

    c!ar mysqlGerror'MSQL mysql*

    Descripcin

    Para la conein especi0icada por mys/l+ mysqlGerror'* regresa una cadena terminada ennulo 'null* conteniendo el mensa)e de error para la 0uncin in(ocada m-s recientemente que

    0all. Si una 0uncin no 0alla+ el (alor de retorno de mysqlGerror'* puede ser el error pre(io ouna cadena (ac@a para indicar que no !u#o error. Kn principio a seguir es que todas las0unciones que tienen que pedir in0ormacin al ser(idor reiniciar-n mysqlGerror'* si tienen,ito. Para 0unciones que reinician mysqlGerrno'*+ las siguientes dos prue#as sonequi(alentes:

    i0'mysqlGerrno'Vmysql**O

    44 ocurri un errori0'mysqlGerror'Vmysql*

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    18/34

    >e(uel(e la de0inicin de una columna de un con)unto de resultados como una estructuraMSQG"IEL>. Se llama a esta 0uncin repetidamente para etraer in0ormacin de todas lascolumnas en el con)unto de resultados. mysqlG0etc!G0ield'* de(uel(e 5KLL cuando noquedan mas campos.

    .alores de retorno

    La estructura MSQLG"IEL> para la columna actual. 5KLL si no !ay m-s columnas.

    +rrores

    5inguno.

    +3emplo

    MSQLG"IEL> 0ieldB9!ile''0ield W mysqlG0etc!G0ield'result***O

    print0'/5om#re del campo Ns/+ 0ield6Uname*B

    mys/l)fetch)fields12

    MSQLG"IEL> mysqlG0etc!G0ields'MSQLGES result*

    Descripcin

    >e(uel(e un arreglo de todas las estructuras MSQLG"IEL> de un con)unto de resultados.Cada estructura pro(ee la de0inicin del campo de una columna del con)unto de resultados.

    .alores de retorno

    Kn arreglo de estructuras MSQLG"IEL> para todas las columnas de un con)unto deresultados.

    +rrores

    5inguno.

    +3emplo

    unsigned int numG0ieldsBunsigned int iBMSQLG"IEL> 0ieldsBnumG0ields W mysqlGnumG0ields'result*B0ields W mysqlG0etc!G0ields'result*B0or'i W %B i [ numG0ieldsB iRR*O

    print0'/Campo Nu es Ns/+ i+ 0ields. Se puede usar

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    19/34

    esta 0uncin para conseguir la de0inicin de una columna ar#itraria. El (alor del campo de#eestar en el rango de % a mysqlGnumG0ields'result*6D.

    .alores de retorno

    La estructura MSQLG"IEL> para la columna especi0icada.

    +rrores

    5inguno.

    +3emplo

    unsigned int numG0ieldsBunsigned int iBMSQLG"IEL> 0ieldBnumG0ields W mysqlGnumG0ields'result*B0or'i W %B i [ numG0ieldsB iRR*O

    0ield W mysqlG0etc!G0ieldGdirect'result+ i*Bprint0'/Campo Nu es Ns/+ i+ 0ield6Uname*B

    mys/l)fetch)lengths12

    unsigned long mysqlG0etc!Glengt!s'MSQLGES result*

    Descripcin

    >e(uel(e las longitudes de las columnas de la 0ila actual dentro de un con)unto de resultados.Si se planea copiar los (alores de campo+ esta in0ormacin de longitud es tam#i,n til paraoptimiacin+ ya que puede e(itar llamar a strlen'*. Adem-s+ si el con)unto de resultadoscontiene datos #inarios+ se de#e usar esta 0uncin para determinar el tamao de los datos+ya que strlen'* de(uel(e resultados incorrectos para cualquier campo que contenga

    caracteres nulos 'null*..alores de retorno

    Kn arreglo de enteros unsigned long representando el tamao de cada columna 'sin incluirningn caracter terminado en null*. 5KLL si ocurre algn error.

    +rrores

    mysqlG0etc!Glengt!s'* es (-lido solo para la 0ila actual del con)unto de resultados. etorna5KLL si es llamado antes de llamar mysqlG0etc!Gro9'* o despu,s de #uscar todas las 0ilas enel resultado.

    +3emplo

    MSQLG?H ro9Bunsigned long lengt!sBunsigned int numG0ieldsBunsigned int iBro9 W mysqlG0etc!Gro9'result*Bi0 'ro9*O

    numG0ields W mysqlGnumG0ields'result*Blengt!s W mysqlG0etc!Glengt!s'result*B0or'i W %B i [ numG0ieldsB iRR*

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    20/34

    Oprint0'/Columna Nu es Nlu #ytes en longitud./+ i+ lengt!s

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    21/34

    Si se est- usando una (ersin de MySQL anterior a la ].$$.$&+ se de#er- usar en cam#io:

    unsigned int mysqlGnumG0ields'MSQL mysql*.

    Descripcin

    >e(uel(e el nmero de columnas para la consulta m-s reciente en la conein mys/l. El usonormal de esta 0uncin es cuando mysqlGstoreGresult'* de(uel(e 5KLL 'y por lo tanto no setiene un puntero al con)unto resultados*. En este caso+ se puede llamar a mysqlG0ieldGcount'*para determinar si mysqlGstoreGresult'* de#@a !a#er producido un resultado no (ac@o. Estopermite al programa cliente tomar la accin adecuada sin sa#er si la consulta 0ue unasentencia SELEC2 'o del tipo SELEC2*.

    .alores de retorno

    Kn entero unsigned representando el nmero de campos en un con)unto de resultados.

    +rrores

    5inguno.

    +3emplo

    MSQLGES resultBunsigned int numG0ieldsBunsigned int numGro9sBi0 'mysqlGquery'Vmysql+queryGstring**O

    44 errorelse 44 la consulta 0ue eitosa+ se procesan los datosO

    result W mysqlGstoreGresult'Vmysql*Bi0 'result* 44 !ay 0ilasO

    numG0ields W mysqlGnumG0ields'result*B44 recuperar las 0ilas y entonces llamar a mysqlG0reeGresult'result*

    else 44 mysqlGstoreGresult'* no regres nada+ de#@a ser as@\ O

    i0'mysqlG0ieldGcount'Vmysql* WW %*O

    44 la consulta no regres datos 44 ',sta no 0ue una consulta SELEC2* numGro9s W mysqlGa00ectedGro9s'Vmysql*B

    else 44 mysqlGstoreGresult'* de#e tener los datos regresados

    O0print0'stderr+ /Error: Ns/+ mysqlGerror'Vmysql**B

    Kna alternati(a es reemplaar la llamada mysqlG0ieldGcount'Vmysql* conmysqlGerrno'Vmysql*. En este caso+ se esta c!ecando directamente por un error demysqlGstoreGresult'* m-s que in0iriendo del (alor de mysqlG0ieldGcount'* si la sentencia 0ueun SELEC2.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    22/34

    mys/l)init12

    MSQL mysqlGinit'MSQL mysql*

    Descripcin

    Asigna o inicialia un o#)eto MSQL adecuado para mysqlGrealGconnect'*. Si mys/les unpuntero 5KLL la 0uncin asigna+ inicialia y de(uel(e un nue(o o#)eto. >e otra manera elo#)eto es inicialiado y la direccin de dic!o o#)eto es regresada. Si mysqlGinit'* asigna unnue(o o#)eto+ ,ste ser- li#erado cuando mysqlGclose'* sea llamada para cerrar la conein.

    .alores de retorno

    Kn mane)ador MSQL inicialiado. 5KLL si la memoria es insu0iciente para asignar unnue(o o#)eto.

    +rrores

    En caso de memoria insu0iciente se de(uel(e 5KLL.

    +3emploPendiente

    mys/l)4ill12

    int mysqlG1ill'MSQL mysql+ unsigned long pid*

    Descripcin

    Le pide al ser(idor que mate el !ilo 't!read* especi0icado por pid.

    .alores de retorno

    Cero en caso de ,ito. >istinto de cero si ocurri algn error.

    +rrores

    CGC?MMA5>SG?K2G?"GS5C+ el comando 0ue e)ecutado en un ordeninapropiado.

    CGSETEG?5EGE?+ el ser(idor MySQL no est- disponi#le. CGSETEGL?S2+ se perdi la conein al ser(idor durante la consulta. CGK5F5?H5GE?+ ocurri un error desconocido.

    +3emplo

    Pediente.

    mys/l)num)ro0s12

    myGulonglong mysqlGnumGro9s'MSQLGES result*

    Descripcin

    >e(uel(e el nmero de 0ilas en un con)unto de resultados.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    23/34

    El uso de mysqlGnumGro9s'* depende del uso de mysqlGstoreGresult'* o mysqlGuseGresult'*para o#tener el con)unto de resultados. Si se utilia mysqlGstoreGresult'*+ mysqlGnumGro9s'*puede ser llamada inmediatamente. Si se usa mysqlGstoreGresult'*+ mysqlGnumGro9s'* noregresar- el (alor correcto !asta que todas las 0ilas en el con)unto de resultados !ayan sidorecuperadas.

    .alores de retorno

    El nmero de 0ilas en el con)unto de resultados.

    +rrores

    5inguno.

    +3emplo

    Pendiente.

    mys/l)/uery12

    int mysqlGquery'MSQL mysql+ const c!ar query*

    Descripcin

    E)ecuta la consulta SQL especi0icada por la cadena /uery. La consulta de#e consistir de unasentencia SQL sencilla+ y no se de#e agregar el punto y coma 'B* al 0inal de la sentencia.

    mysqlGquery'* no puede ser usada por consultas que contengan datos #inariosB en su lugarde#e ser usada la 0uncin mysqlGrealGquery'*.

    Si se desea conocer si la consulta de#e regresar un con)unto de resultados o no+ se puedeusar mysqlG0ieldGcount'* para c!ecar esto.

    .alores de retorno

    Cero si la consulta 0ue eitosa. >istinto de cero si ocurri un error.

    +rrores

    CGC?MMA5>SG?K2G?"GS5C+ el comando 0ue e)ecutado en un ordeninapropiado.

    CGSETEG?5EGE?+ el ser(idor MySQL no est- disponi#le.

    CGSETEGL?S2+ se perdi la conein al ser(idor durante la consulta. CGK5F5?H5GE?+ ocurri un error desconocido.

    +3emplo

    Pendiente.

    mys/l)real)connect12

    MSQL mysqlGrealGconnect'MSQL mysql+ const c!ar !ost+ const c!ar user+const c!ar pass9d+ const c!ar d#+ unsigned int port+

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    24/34

    const c!ar uniGsoc1et+ unsigned long clientG0lag*

    Descripcin

    mysqlGrealGconnect'* intenta esta#lecer una conein con al ser(idor de #ases de datosMSQL corriendo en un host. mysqlGrealGconnect'* de#e completarse eitosamente antesde poder e)ecutar cualquier otra 0uncin+ con la ecepcin de mysqlGclientGin0o'*. Los

    par-metros son especi0icados como sigue: El primer par-metro de#e ser la direccin de una estructura MSQL eistente. Antes

    de llamar a mysqlGrealGconnect'* es necesario llamar a mysqlGinit'* para inicialiar laestructura MSQL. 2am#i,n se pueden cam#iar (arias opciones de conein con lallamada de mysqlGoptions'*.

    El (alor de hostpuede un !ostname o una direccin IP. Si hostes 5KLL o la cadena/local!ost/+ entonces se asume la conein con el !ost local. Si el sistema soportasoc1ets 'Kni* o pipes 'Hindo9s* ,stos son usados en (e de 2CP4IP para conectarseal ser(idor.

    El par-metro usercontiene el login para usuarios de MySQL. Si useres 5KLL o la

    cadena (ac@a //+ el usuario actual es asumido. 7a)o Kni+ este es el login actual. 7a)ootros sistemas es di0erente. El par-metro pass0dcontiene el pass9ord de usuario. Si pass0des 5KLL+ slo

    ser-n c!ecadas las entradas en la ta#la user que tengan un pass9ord (ac@o. El par-metro d%es el nom#re de la #ase de datos. Si d%no es 5KLL+ la conein

    pondr- la #ase de datos de0ault a este (alor. Si portno es % 'cero*+ dic!o (alor ser- usado como nmero de puerto para

    coneiones 2CP4IP. 5otar que el par-metro hostdetermina el tipo de la conein.

    .alores de retorno

    Kn mane)ador de conein a MSQL si la conein 0ue realiada con ,ito+ y 5KLL si la

    conein 0all. En una conein eitosa+ el (alor de retorno es igual al (alor del primerpar-metro.

    +rrores

    CGC?55G3?S2GE?+ 0allo al conectarse al ser(idor MySQL. CGC?55EC2I?5GE?+ 0allo al conectarse al ser(idor MySQL local. CGIPS?CFGE?+ 0allo al crear un soc1et IP. CG?K2G?"GMEM?+ 0uera de memoria. CGS?CFE2GCEA2EGE?+ 0allo al crear un soc1et Kni. CGK5F5?H5G3?S2+ 0allo al localiar la direccin IP del !ost. CGTESI?5GE?+ una incompati#ilidad de protocolos result al intentar

    conectarse al ser(idor con una li#rer@a cliente que usar una (ersin de protocolodi0erente.

    CG5AME>PIPE?PE5GE?+ 0allo al crear un pipe en Hindo9s. CG5AME>PIPEHAI2GE?+ 0allo al esperar un pipe en Hindo9s. CG5AME>PIPESE2S2A2EGE?+ 0allo al o#tener un pipe en Hindo9s.

    +3emplo

    MSQL mysqlBmysqlGinit'Vmysql*B

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    25/34

    mysqlGoptions'Vmysql+MSQLGEA>G>E"AKL2G?KP+/yourGprogGname/*Bi0 'YmysqlGrealGconnect'Vmysql+/!ost/+/user/+/pass9d/+/data#ase/+%+5KLL+%**O

    0print0'stderr+ /"allo al esta#lecer la conein: Error: Ns/+mysqlGerror'Vmysql**B

    mys/l)store)result12

    MSQLGES mysqlGstoreGresult'MSQL mysql*

    Descripcin

    Se de#e llamar a mysqlGstoreGresult'* o mysqlGuseGresult'* para cada consulta 'SELEC2+S3?H+ >ESCI7E+ EPLAI5* que recupere datos de manera eitosa.

    5o se tiene que llamar a mysqlGstoreGresult'* o mysqlGuseGresult'* para otras consultas+ sinem#argo no !ay nota#les pro#lemas de e0iciencia si se llama a mysqlGstoreGresult'* en todos

    los casos.

    Si de desea conocer si la consulta de#e regresar un con)unto de resultados o no+ se puedeusar mysqlG0ieldGcount'* para a(eriguar esto.

    mysqlGstoreGresult'* lee el resultado completo de la consulta y lo guarda en el cliente en unaestructura MSQLGES.

    mysqlGstoreGresult'* de(uel(e un puntero nulo si la consulta no de(uel(e un con)unto deresultados 'si la consulta 0ue+ por e)emplo+ un sentencia I5SE2*.

    mysqlGstoreGresult'* tam#i,n de(uel(e un puntero nulo si 0alla la lectura del con)unto deresultados. En este caso+ se recomienda el uso de mysqlGerror'* para a(eriguar que es loque 0all.

    Kn con)unto de resultados (ac@o es regresado si la consulta no de(uel(e 0ilas. 'Kn con)untode resultados (ac@o di0iere de un puntero nulo*

    Kna (e que se !a llamado a mysqlGstoreGresult'* y se o#tiene un con)unto de resultadosque no es un puntero nulo+ se puede llamar a mysqlGnumGro9s'* para determinar cu-ntas0ilas !ay en el con)unto de resultados.

    Se puede llamar a mysqlG0etc!Gro9'* para ir leyendo las 0ilas del con)unto de resultados+ omysqlGro9Gsee1'* y mysqlGro9Gtell'* para o#tener o 0i)ar la posicin de la 0ila actual dentrodel con)unto de resultados. Se de#e llamar a mysqlG0reeGresult'* una (e que ya no se usar-

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    26/34

    el con)unto de resultados.

    .alores de retorno

    Kna estructura MSQLGES con los resultados. 5KLL si ocurri un error.

    +rrores

    CGC?MMA5>SG?K2G?"GS5C+ el comando 0ue e)ecutado en un ordeninapropiado.

    CG?K2G?"GMEM?+ 0uera de memoria. CGSETEG?5EGE?+ el ser(idor MySQL no est- disponi#le. CGSETEGL?S2+ se perdi la conein al ser(idor durante la consulta. CGK5F5?H5GE?+ ocurri un error desconocido.

    +3emplo

    Pendiente.

    mys/l)use)result12

    MSQLGES mysqlGuseGresult'MSQL mysql*

    Descripcin

    Se de#e llamar a mysqlGstoreGresult'* o mysqlGuseGresult'* para cada consulta 'SELEC2+S3?H+ >ESCI7E+ EPLAI5* que recupere datos de manera eitosa.

    mysqlGuseGresult'* inicialia la recuperacin de un con)unto de resultados pero no lee elcon)unto de resultados como lo !ace mysqlGstoreGresult'*. En este caso+ cada 0ila esrecuperada indi(idualmente al !acer llamadas a mysqlG0etc!Gro9'*. Esta 0uncin lee losresultados de una consulta directamente desde el ser(idor+ sin la necesidad de almacenar losresultados en el cliente+ por lo que utilia muc!o menos memoria que mysqlGstoreGresult'*. Elcliente asigna memoria nicamente para la 0ila actual y un #u00er de comunicacin que puedeser !asta de ma5)allo0ed)pac4et#ytes.

    Por el otro lado+ no se de#e usar mysqlGuseGresult'* si se est- !aciendo muc!oprocesamiento de las 0ilas en el lado del cliente.

    Cuando se use mysqlGuseGresult'*+ se de#e e)ecutar mysqlG0etc!Gro9'* !asta que sede(uel(a un (alor 5KLL+ de lo contrario+ la 0ilas no recuperadas ser-n de(ueltas como partedel con)unto de resultados en la siguiente consulta.

    5o se puede usar mysqlGdataGsee1'*+ mysqlGro9Gsee1'*+ mysqlGro9Gtell'*+mysqlGnumGro9s'* o mysqlGa00ectedGro9s'* con se mane)a un con)unto de resultados conmysqlGuseGresult'*+ sin em#argo+ una (e que se !an recuperado todas las 0ilas+mysqlGnumGro9s'* s@ de(uel(e el total de 0ilas.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    27/34

    Se de#e llamar a mysqlG0reeGresult'* una (e que ya no se usar- el con)unto de resultados.

    .alores de retorno

    Kna estructura MSQLGES. 5KLL si ocurri un error.

    +rrores

    CGC?MMA5>SG?K2G?"GS5C+ el comando 0ue e)ecutado en un ordeninapropiado.

    CG?K2G?"GMEM?+ 0uera de memoria. CGSETEG?5EGE?+ el ser(idor MySQL no est- disponi#le. CGSETEGL?S2+ se perdi la conein al ser(idor durante la consulta. CGK5F5?H5GE?+ ocurri un error desconocido.

    +3emplo

    Pendiente.

    Creacin de programas cliente

    A continuacin se presenta un #re(e e)emplo so#re el uso del API C de MySQL. Esteprograma de e)emplo de#er@a de poder ser compilado y e)ecutado en cualquier distri#ucinde Linu.

    Para el e)emplo que se (a a mostrar+ se usar- la siguiente #ase de datos de prue#a.

    mysqlU CEA2E >A2A7ASE d#testB

    Query ?F+ D ro9 a00ected '%.%% sec*mysqlU use d#testB>ata#ase c!anged

    mysqlU CEA2E 2A7LE t#ltest'id int not null autoGincrement+ 6U datos (arc!ar'$XX* de0ault null+ 6U primary 1ey'id**BQuery ?F+ % ro9s a00ected '%.% sec*

    mysqlU A52 ALL ?5 d#test. 2? d#usr8local!ost I>E52I"IE> 7 /d#p9d/BQuery ?F+ % ro9s a00ected '%.%X sec*

    +sta%lecer la cone5in

    Antes de poder mandar algn tipo de consulta al ser(idor+ es necesario tener disponi#le unaconein a la #ase de datos.

    Para esta#lecer la conein a un ser(idor MySQL+ se puede utiliar la 0uncinmysqlGconnect'*+ o mysqlGrealGconnect'*+ sin em#argo+ dado que el uso de mysqlGconnect'*est- quedando o#soleto+ se recomienda el uso de mysqlGrealGconnect'*.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    28/34

    Al intentar esta#lecer la conein+ es necesario llamar a la 0uncin mysqlGinit'* para inicialiarun mane)ador de conein y posteriormente llamar a la 0uncin mysqlGrealGconnect'* condic!o mane)ador ')unto con otra otro in0ormacin tal como el ser(idor+ el nom#re de usuario+ yla contrasea*.

    MSQL mysqlBmysqlGinit'Vmysql*B

    i0 'YmysqlGrealGconnect'Vmysql+/local!ost/+/d#usr/+/d#p9d/+/d#test/+%+5KLL+%**O print0'/"all en la conein a la #ase de datos+ Error: Ns^n/+mysqlGerror'Vmysql**B

    En este momento la 0uncin mysqlGrealGconnect'* pone la #andera /reconnect/ 'parte de laestructura MSQL* a un (alor D. Esta #andera indica que en el caso de que una consulta no

    pueda ser e)ecutada de#ido a que se perdi de la conein+ se intentar- (ol(er a esta#lecerla conein al ser(idor antes de cancelar la e)ecucin de la consulta. Cuando ya no se utiliceuna conein+ se llama a la 0uncin mysqlGclose'* para destruirla.

    Para detectar y reportar errores+ MySQL proporciona acceso a la in0ormacin de los errorespor medio de las 0unciones mysqlGerrno'* y mysqlGerror'*. _stas regresan el cdigo del erroro el mensa)e de error para la 0uncin in(ocada m-s recientemente+ permitiendo determinarcuando ocurri un error y cual 0ue.

    +3ecucin de sentenciasMientras una conein est, acti(a+ el cliente puede en(iar sentencias SQL al ser(idor usandola 0uncin mysqlGquery'*.

    Esta 0uncin toma como par-metros la conein a la #ase de datos+ y la consulta que sequiere realiar. En caso de ,ito+ se retorna un (alor cero. En el caso especial que senecesiten insertar datos #inarios 'los cuales puede incluir #ytes nulos*+ se de#e usar una0uncin relacionada llamada mysqlGrealGquery'*. Para el e)emplo que ser- presentado aqu@+se !ar- uso de mysqlGquery'*.

    5ota: las consultas que se en(ian no de#en terminar en punto y coma.

    Sentencias SQL /ue no de"uel"en datos

    Las sentencias no SELEC2 'I5SE2+ >ELE2E y KP>A2E* son sentencias que no de(uel(endatos+ y por lo tanto son m-s sencillas de usar.

    Para cada consulta de este tipo se puede a(eriguar cu-ntas 0ilas 0ueron cam#iadas 'o #ien

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    29/34

    a0ectadas* al llamar a la 0uncin mysqlGa00ectedGro9s'*.

    mysqlGquery'Vmysql+ /I5SE2 I52? t#ltest TALKES'%+Z>ato de prue#a AZ*/*B

    i0'mysqlGa00ectedGro9s'Vmysql* U %* print0'/Nlu registro insertado. /+

    'unsigned long*mysqlGa00ectedGro9s'Vmysql**Belse print0'/"allo al insertar el registro+ Error: Ns/+ mysqlGerror'Vmysql**B

    Por raones de porta#ilidad+ la 0uncin mysqlGa00ectedGro9s'* de(uel(e un (alor especial querepresenta un entero sin signo. Para usar la 0uncin print0'*+ se recomienda que se !aga uncast a unsigned long+ con un especi0icacin de 0ormato Nlu.

    Antes de insertar datos en una #ase de datos generalmente se de#en escapar todos loscaracteres especiales+ esto es+ aquellos caracteres que para MySQL tienen un signi0icadoespecial. La 0uncin mysqlGrealGescapeGstring'* es usada para este propsito. Esta 0uncin

    toma como par-metros un o#)eto MSQL+ un #u00er para almacenar los datos codi0icados+los datos originales+ y la longitud de los datos originales. Al usar esta 0uncin de#emosasegurarnos de que el #u00er sea del do#le de tamao que los datos originales+ con un #yteetra para el caracter 5KLL al 0inal de la cadena.

    Sentencias /ue de"uel"en datos

    Para leer los registros de una #ase de datos se en(ia una sentencia SELEC2 tam#i,n con eluso de la 0uncin mysqlGquery'*.

    Para consultas SELEC2+ se o#tienen las 0ilas seleccionadas como un con)unto de resultados.'5otar que algunas sentencias son similares a un SELEC2 en el sentido de que tam#i,nde(uel(en 0ilas. Estas incluyen S3?H+ >ESCI7E+ y EPLAI5+ y de#en ser tratadas de lamisma manera que una sentencia SELEC2*.

    3ay dos 0ormas en las que un cliente puede procesar un con)unto de resultados. Kna de ellases recuperar en el momento el con)unto de resultados completo al llamar a la 0uncinmysqlGstoreGresult'*. Esta 0uncin o#tiene desde el ser(idor todas las 0ilas regresadas por laconsulta y los almacena en el cliente. La segunda 0orma es que el cliente recupere 0ila por 0ila

    del con)unto de resultados al llamar a la 0uncin mysqlGuseGresult'*. Esta 0uncin inicialia larecuperacin de los datos+ pero realmente no o#tiene ninguna 0ila desde el ser(idor.

    En am#os casos+ el acceso a las 0ilas se !ace con la 0uncin mysqlG0etc!Gro9'*. ConmysqlGstoreGresult'*+ mysqlG0etc!Gro9'* accede las 0ilas que ya !an sido recuperadas desdeel ser(idor. Con mysqlGuseGresult'*+ mysqlG0etc!Gro9'* recupera solo una 0ila desde elser(idor. La in0ormacin acerca del tamao de los datos en cada 0ila esta disponi#le al llamara la 0uncin mysqlG0etc!Glengt!s'*.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    30/34

    mysqlGquery'Vconn+ /SELEC2 "?M t#ltest/*B res W mysqlGstoreGresult'Vconn*B

    0or'iW%B i[ mysqlGnumGro9s'res*B iRR* O ro9 W mysqlG0etc!Gro9'res*B print0'/Ns Ns n/+ ro9A2E+ >ELE2E+ etc.*+ y nose espera#a que regresaran 0ilas. Si mysqlG0ieldGcount'* es distinto de cero+ la consulta de#iregresar 0ilas+ pero no lo !io. Lo que indica que la consulta 0ue un SELEC2 que 0allo.e(isar la descripcin de la 0uncin mysqlG0ieldGcount'* para (er un e)emplo de como puedeser utiliada.

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    31/34

    Am#os mysqlGstoreGresult'* y mysqlGuseGresult'* permiten o#tener in0ormacin acerca de loscampos que componen el con)unto de resultados 'el nmero de campos+ sus nom#res ytipos+ etc*. Se puede acceder la in0ormacin de los campos secuencialmente dentro de la 0ilaal llamar a la 0uncin mysqlG0etc!G0ield'* repetidamente+ o por el nmero de campo dentro dela 0ila al llamar a la 0uncin mysqlG0etc!G0ieldGdirect'*. La posicin actual del cursor en el

    campo puede ser cam#iada al llamar a mysqlG0ieldGsee1'*. Al 0i)ar el cursor en el campo sea0ectan las su#secuentes llamadas a mysqlG0etc!G0ield'*. 2am#i,n se puede o#tener lain0ormacin de todos los campos a la (e al llamar a la 0uncin mysqlG0etc!G0ields'*.

    E)emplo completo

    `include [stdli#.!U`include [mysql.!U

    int main 'int argc+ c!ar arg(

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    32/34

    Oro9 W mysqlG0etc!Gro9'res*Bprint0'/Ns ^t^t Ns ^n/+ ro9esde la (ersin &.D MySQL soporta la e)ecucin de mltiples sentencias especi0icadas enuna sola consulta. Para usar esta capacidad en una conein dada+ se necesita especi0icar laopcin CLIE52GMKL2IGQKEIES en los par-metros de mysqlGrealGconnect'* cuando sea#re la conein. Se puede tam#i,n 0i)ar el (alor para una conein al llamarmysqlGsetGser(erGoption'MSQLG?P2I?5GMKL2IGS2A2EME52SG?5*.

    Por de0ecto mysqlGquery'* y mysqlGrealGquery'* de(uel(en solamente el primer status de laconsulta y los siguientes status se pueden procesar usando mysqlGmoreGresults'* ymysqlGneGresults'*.

    +3emplo

    4 Conecta al ser(idor con la opcin CLIE52GMKL2IGQKEIES 4mysqlGrealGconnect'...+ CLIE52GMKL2IGQKEIES*B

    4 e)ecuta (arias consultas 4

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    33/34

    mysqlGquery'mysql+/>?P 2A7LE I" EIS2S testGta#leBCEA2E 2A7LE testGta#le'id I52*BI5SE2 I52? testGta#le TALKES'D%*BKP>A2E testGta#le SE2 idW$% H3EE idWD%BSELEC2 "?M testGta#leB>?P 2A7LE testGta#le/B

    do

    O 4 Procesa todos los resultados 4 ... print0'/2otal de 0ilas a0ectadas: Nlld/+ mysqlGa00ectedGro9s'mysql**B ... i0 'Y'resultW mysqlGstoreGresult'mysql*** O print0'stderr+ /Error al procesar la consulta.^n/*B eit'D*B processGresultGset'result*B 4 0uncin cliente 4 mysqlG0reeGresult'result*B 9!ile 'YmysqlGnetGresult'mysql**B

    Ser"idor em%e%ido 1em%edded ser"er2

    5ota: a!ora ya no se est- !a#lando de la li#rer@a mys/lclientsino de la li#rer@a mys/ld.

    Se necesitan las siguientes 0unciones para permitir a las aplicaciones ser enlaadas a lasli#rer@as del ser(idor MySQL em#e#ido 'em#edded ser(er*. Si el programa es enlaado con li#mysqlclient en lugar de lmysqld+ estas 0unciones no !acen nada. Esto !ace posi#le elegirentre usar el ser(idor em#e#ido y un ser(idor stand6alone sin !acer ninguna modi0icacin decdigo.

    mys/l)ser"er)init12

    int mysqlGser(erGinit'int argc+ c!ar arg(+ c!ar groups*

    Descripcin

    La 0uncin necesita ser llamada una (e en el programa usando el ser(idor em#e#ido antesde llamar a ninguna otra 0uncin. Esto arranca el ser(idor e inicialia cualquier otrosu#sistema 'mysys+ Inno>7+ etc* que use el ser(idor. Si esta 0uncin no es llamada elprograma 0allar-.

    Los argumentos argc y arg( son an-logos a los argumentos de main'*. El primer elemento dearg( es ignorado 'por lo general contiene el nom#re del programa*. Por con(eniencia+ argcpuede ser % 'cero* si no !ay argumentos de l@nea de comandos para el ser(idor.mysqlGser(erGinit'* !ace una copia de los argumentos as@ que se puede destruir arg( ogroups de manera segura despu,s de la llamada mysqlGser(erGinit'*.

    .alores de retorno

    www.detodoprogramacion.com

  • 5/23/2018 Programacion Aplicaciones MySQL Con C

    34/34

    % si est- todo #ien+ D si ocurri un error.

    +3emplo

    `include`includestatic c!ar ser(erGargs