Página 1 de 1

Conectarse a la base de datos

NotaPublicado: 2007-05-09 05:43 @279
por chelusan
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.003 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

NotaPublicado: 2007-05-09 06:24 @308
por monoswim
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

NotaPublicado: 2007-05-09 06:39 @319
por chelusan
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

NotaPublicado: 2007-05-09 10:25 @476
por explorer
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.

NotaPublicado: 2007-05-10 08:52 @411
por monoswim
Solo un detalle, ¿es correcto que el prepare de ese código lo hagas a dbh y no a dbh2?

Saludos

NotaPublicado: 2007-05-10 09:16 @427
por chelusan
si, cambiando eso tampoco me funciona

NotaPublicado: 2007-05-12 15:52 @703
por explorer
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.

NotaPublicado: 2007-05-14 06:41 @320
por chelusan
gracias explorer, era justo por eso