{"id":269,"date":"2004-11-30T18:54:00","date_gmt":"2004-12-01T01:54:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=269"},"modified":"2004-11-30T18:54:00","modified_gmt":"2004-12-01T01:54:00","slug":"echando-codigo-como-conectarse-a-una-base-de-datos-usando-perl","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2004\/11\/30\/echando-codigo-como-conectarse-a-una-base-de-datos-usando-perl\/","title":{"rendered":"Echando c\u00f3digo: Como conectarse a una base de datos usando Perl"},"content":{"rendered":"<p>Bueno, dado que \u00faltimamente s\u00f3lo he puesto c\u00f3digo de Java, vamos a hacerle un cari\u00f1ito a Perl \ud83d\ude42<\/p>\n<p>Resulta que Perl tambi\u00e9n tiene una API muy f\u00e1cil de usar llamada DBI; Cada base de datos a su vez cuenta con un m\u00f3dulo especializado llamado DBD::XXX. As\u00ed hay modulos para PostgreSQL (DBD:Pgsql), MySQL (DBD::Mysql), Sybase (DBD::Sybase) y as\u00ed sucesivamente.<\/p>\n<p>\u00bfQue tal f\u00e1cil es de usar?. Bueno, este peque\u00f1o programa se conecta a una base de datos MySQL y hace un simple &#8216;select count(*)&#8217;:<\/p>\n<style type=\"text\/css\"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax1\">#<\/span><span class=\"syntax1\">!\/usr\/bin\/perl<\/span>\n<br \/><span class=\"gutter\">   2:<\/span><span class=\"syntax1\">#<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Author:<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Jose<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Vicente<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Nunez<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Zuleta<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">(josevnz@yahoo.com).<\/span>\n<br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax1\">#<\/span>\n<br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax8\">use<\/span> <span style=\"color: rgb(255, 0, 0);\">DBI;<\/span>\n<br \/><span class=\"gutterH\">   5:<\/span><span class=\"syntax8\">use<\/span> <span style=\"color: rgb(255, 0, 0);\">DBD<\/span><span style=\"color: rgb(255, 0, 0);\" class=\"syntax18\">:<\/span><span style=\"color: rgb(255, 0, 0);\" class=\"syntax18\">:<\/span><span style=\"color: rgb(255, 0, 0);\">mysql;<\/span>\n<br \/><span class=\"gutter\">   6:<\/span><span class=\"syntax8\">use<\/span> strict;\n<br \/><span class=\"gutter\">   7:<\/span>\n<br \/><span class=\"gutter\">   8:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$user<\/span>        <span class=\"syntax18\">=<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">bugs<\/span><span class=\"syntax13\">\"<\/span>;\n<br \/><span class=\"gutter\">   9:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$password<\/span>    <span class=\"syntax18\">=<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">xxxx<\/span><span class=\"syntax13\">\"<\/span>;\n<br \/><span class=\"gutterH\">  10:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$database<\/span>    <span class=\"syntax18\">=<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">bugs<\/span><span class=\"syntax13\">\"<\/span>;\n<br \/><span class=\"gutter\">  11:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$driver<\/span>      <span class=\"syntax18\">=<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Mysql<\/span><span class=\"syntax13\">\"<\/span>;\n<br \/><span class=\"gutter\">  12:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$host<\/span>        <span class=\"syntax18\">=<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">localhost<\/span><span class=\"syntax13\">\"<\/span>;\n<br \/><span class=\"gutter\">  13:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$port<\/span>        <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">3306<\/span>;\n<br \/><span class=\"gutter\">  14:<\/span>\n<br \/><span class=\"gutterH\">  15:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$sql<\/span>         <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">&lt;&lt;SQL<\/span>\n<br \/><span class=\"gutter\">  16:<\/span><span class=\"syntax13\">SELECT<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">count<\/span><span class=\"syntax13\">(<\/span><span class=\"syntax13\">*<\/span><span class=\"syntax13\">)<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">FROM<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">bugs<\/span>\n<br \/><span class=\"gutter\">  17:<\/span><span class=\"syntax14\">SQL<\/span>\n<br \/><span class=\"gutter\">  18:<\/span>;\n<br \/><span class=\"gutter\">  19:<\/span>\n<br \/><span class=\"gutterH\">  20:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$dsn<\/span> <span class=\"syntax18\">=<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">DBI<\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\">mysql<\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\">database<\/span><span class=\"syntax13\">=<\/span><span class=\"syntax9\">$<\/span><span class=\"syntax9\">database<\/span><span class=\"syntax13\">;<\/span><span class=\"syntax13\">host<\/span><span class=\"syntax13\">=<\/span><span class=\"syntax9\">$<\/span><span class=\"syntax9\">host<\/span><span class=\"syntax13\">;<\/span><span class=\"syntax13\">port<\/span><span class=\"syntax13\">=<\/span><span class=\"syntax9\">$<\/span><span class=\"syntax9\">port<\/span><span class=\"syntax13\">\"<\/span>;\n<br \/><span class=\"gutter\">  21:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$con<\/span> <span class=\"syntax18\">=<\/span>  <span class=\"syntax10\">undef<\/span>;\n<br \/><span class=\"gutter\">  22:<\/span><span class=\"syntax8\">my<\/span> <span class=\"syntax9\">$res<\/span> <span class=\"syntax18\">=<\/span>  <span class=\"syntax10\">undef<\/span>;\n<br \/><span class=\"gutter\">  23:<\/span><span class=\"syntax8\">eval<\/span> <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  24:<\/span>        DBI<span class=\"syntax18\">-<\/span><span class=\"syntax18\">&gt;<\/span><span class=\"syntax10\">connect<\/span>(<span class=\"syntax9\">$dsn<\/span>, <span class=\"syntax9\">$user<\/span>, <span class=\"syntax9\">$password<\/span>);\n<br \/><span class=\"gutterH\">  25:<\/span>\n<br \/><span class=\"gutter\">  26:<\/span>        <span class=\"syntax9\">$res<\/span> <span class=\"syntax18\">=<\/span> <span class=\"syntax9\">$con<\/span><span class=\"syntax18\">-<\/span><span class=\"syntax18\">&gt;<\/span>prepare(<span class=\"syntax9\">$sql<\/span>);\n<br \/><span class=\"gutter\">  27:<\/span>        <span class=\"syntax9\">$res<\/span><span class=\"syntax18\">-<\/span><span class=\"syntax18\">&gt;<\/span>execute();\n<br \/><span class=\"gutter\">  28:<\/span>        <span class=\"syntax8\">while<\/span> (<span class=\"syntax8\">my<\/span> (<span class=\"syntax9\">$count<\/span>) <span class=\"syntax18\">=<\/span> <span class=\"syntax9\">$res<\/span><span class=\"syntax18\">-<\/span><span class=\"syntax18\">&gt;<\/span>fetchrow()) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  29:<\/span>                <span class=\"syntax10\">print<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax9\">$<\/span><span class=\"syntax9\">count<\/span><span class=\"syntax13\">\\n<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutterH\">  30:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  31:<\/span><span class=\"syntax18\">}<\/span>;\n<br \/><span class=\"gutter\">  32:<\/span><span class=\"syntax8\">if<\/span> (<span class=\"syntax9\">$DBI<\/span><span class=\"syntax18\">:<\/span><span class=\"syntax18\">:<\/span>errstr) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  33:<\/span>        <span class=\"syntax8\">die<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax9\">$<\/span><span class=\"syntax9\">DBI<\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\">errstr<\/span><span class=\"syntax13\">\"<\/span>;\n<br \/><span class=\"gutter\">  34:<\/span><span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\">  35:<\/span>\n<br \/><span class=\"gutter\">  36:<\/span><span class=\"syntax8\">if<\/span> (<span class=\"syntax10\">defined<\/span> <span class=\"syntax9\">$res<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  37:<\/span>        <span class=\"syntax9\">$res<\/span><span class=\"syntax18\">-<\/span><span class=\"syntax18\">&gt;<\/span>finish();\n<br \/><span class=\"gutter\">  38:<\/span><span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  39:<\/span><span class=\"syntax8\">if<\/span> (<span class=\"syntax10\">defined<\/span> <span class=\"syntax9\">$con<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\">  40:<\/span>        <span class=\"syntax9\">$con<\/span><span class=\"syntax18\">-<\/span><span class=\"syntax18\">&gt;<\/span>disconnect();\n<br \/><span class=\"gutter\">  41:<\/span><span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  42:<\/span>\n<br \/><span class=\"gutter\">  43:<\/span>__END__\n<br \/><\/pre>\n<p>Estos modulos los puede conseguir en <a href=\"http:\/\/search.cpan.org\/\">CPAN<\/a> (la base de datos de software para Perl m\u00e1s grande del mundo). Puede empezar con este<a href=\"http:\/\/www.perl.com\/pub\/a\/1999\/10\/DBI.html\"> tutorial<\/a> si de verdad quiere aprender m\u00e1s.<br \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bueno, dado que \u00faltimamente s\u00f3lo he puesto c\u00f3digo de Java, vamos a hacerle un cari\u00f1ito a Perl \ud83d\ude42 Resulta que Perl tambi\u00e9n tiene una API muy f\u00e1cil de usar llamada DBI; Cada base de datos a su vez cuenta con un m\u00f3dulo especializado llamado DBD::XXX. As\u00ed hay modulos para PostgreSQL (DBD:Pgsql), MySQL (DBD::Mysql), Sybase (DBD::Sybase) <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2004\/11\/30\/echando-codigo-como-conectarse-a-una-base-de-datos-usando-perl\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/269"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=269"}],"version-history":[{"count":0,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/269\/revisions"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=269"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}