• Publicidad

Conectarse a la base de datos

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Conectarse a la base de datos

Notapor chelusan » 2007-05-09 05:43 @279

Tengo que resolver algo que no actualiza bien en la base de datos. Es la primera vez que uso Perl. El archivo conectDB tiene como 3 formas de conectarse. Esto es lo que pone en el archivo

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
package ConectarDB;
use strict;
use DBI;

# variables a editar
my $db_user = "xxxxxx";
my $db_pass = "1234";
my $host_name = "xxxxx";
my $db_name = "1234";
my $db_name2 = "1234";
my $db_name3 = "xxxxxx";

my $q_string = "DBI:mysql:host=$host_name;database=$db_name";
my $q_string2 = "DBI:mysql:host=$host_name;database=$db_name2";
my $q_string3 = "DBI:mysql:host=$host_name;database=$db_name3";

sub connect{
return (DBI->connect ($q_string, $db_user, $db_pass,
{PrintError => 0, RaiseError => 1}));
}

sub connect2{
return (DBI->connect ($q_string2, $db_user, $db_pass,
{PrintError => 0, RaiseError => 1}));
}

sub connect3{
return (DBI->connect ($q_string3, $db_user, $db_pass,
{PrintError => 0, RaiseError => 1}));
}

1;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Más adelante se accede a la base de datos con el connect. Se actualiza un campo que sí funciona. Luego se conecta mediante connect2 y da fallos al modificar unos campos. ¿No es necesario desconectar y luego volver a conectar?, porque en el fichero éste no cierra la conexión hasta el final.

No tengo mucha idea de esto, tenerme paciencia.

gracias
Última edición por chelusan el 2007-05-14 06:37 @317, editado 1 vez en total
chelusan
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-05-09 04:43 @238

Publicidad

Notapor monoswim » 2007-05-09 06:24 @308

Pero lo puedes desconectar vos personalmente, no necesitas el package para desconectarlo; seguramente te conectas con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$mivar = $package->conect2();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

puedes hacer
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$mivar->disconnect();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

ya que el connect te crea un objeto DBI en la variable que vos definas y en esa variable puedes llamar a la función disconnect de DBI.

Espero que te sirva.

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor chelusan » 2007-05-09 06:39 @319

Pero no me explicas porqué al poner

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dbh2 = ConectarDB->connect2();
$sth2 = $dbh->prepare('UPDATE $var SET c1=? WHERE c2=? AND c3=?');
$sth2->execute($v1,$v2,$v3);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


no me actualiza la base de datos.

Luego todo lo cierro bien
Última edición por chelusan el 2007-05-14 06:39 @319, editado 1 vez en total
chelusan
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-05-09 04:43 @238

Notapor explorer » 2007-05-09 10:25 @476

Las funciones de base de datos suelen devolver los errores en la variable $DBI::errstr, por lo que es posible saber porqué han fallado. Y la base de datos también se le puede indicar que genere un log de actividad.

El número de conexiones abiertas puede ser muy alto, pero depende del sistema operativo. La cuestión es que cada conexión se almacene en su variable escalar correspondiente.

Por ejemplo, en $dbh2 guardas una conexión a una base de datos. Mientras no la cierres, podrás preguntar y acceder a esa base de datos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor monoswim » 2007-05-10 08:52 @411

Solo un detalle, ¿es correcto que el prepare de ese código lo hagas a dbh y no a dbh2?

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor chelusan » 2007-05-10 09:16 @427

si, cambiando eso tampoco me funciona
chelusan
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-05-09 04:43 @238

Notapor explorer » 2007-05-12 15:52 @703

Vaya... no me he dado cuenta del error hasta que lo he visto en el otro foro: estás usando comilla simple dentro del prepare. Ha de ser doble para que el valor de $distribuidor aparezca dentro de la sentencia sql, no '$distribuidor' de forma literal.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor chelusan » 2007-05-14 06:41 @320

gracias explorer, era justo por eso
chelusan
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-05-09 04:43 @238


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 11 invitados

cron