[caracas-pm] Consulta a Informix mediante Perl DBI--Use of uninitialized value in concatenation (.) or string

Alexis Arnal aarnal at me.gov.ve
Mon Sep 6 17:20:41 CDT 2004


Saludos, gracias por las sugerencias, las he probado casi todas menos la
de la ligadura, ya que no estoy muy familiarizado con esta última.

Leyendo la documentación de DBI le incluí la variable para que muestre
el error $DBI::err. 

Estoy teniendo el siguiente problema:
--------------------------------------------
Conectado a la Base de Datos
Use of uninitialized value in concatenation (.) or string at
/var/www/cgi-bin/ejemploperl/conexperl.pl line 8.
Use of uninitialized value in concatenation (.) or string at
/var/www/cgi-bin/ejemploperl/conexperl.pl line 8.

Error ():
---------------------------------------------

El código que estoy usando es el siguiente. Lo probe en el debugger y no
entiendo porque pierde los valores al preparar el statement
-----------------------------------------------
#!/usr/bin/perl -w
use DBI;
$driver=q%dbi:Informix:foo at bar%;
$dbh=DBI->connect($driver) or die "\nError ($DBI::err): $DBI::errstr\n";
print "Conectado a la Base de Datos\n";
   
my $sql = q{ select nombre from persona where cedula = ? };
$stmt = $dbh->prepare($sql)or die "\nError ($DBI::err): $DBI::errstr\n";
$stmt->execute("12345678")or die "\nError ($DBI::err): $DBI::errstr\n";
--------------------------------------------------
Disculpen pero estoy que casi tiro la toalla ya que esto es en teoría
algo sencillo que debería funcionar sin problemas.

Revise los ejemplos que vienen con la documentación de DBD::Informix y
son similares a lo que tengo en mi código.

Atte.
Ing. Alexis Arnal
MED. Caracas-Venezuela


El lun, 06-09-2004 a las 13:38, Ernesto Hernandez-Novich escribió:
> On Mon, 6 Sep 2004, Francisco Obispo wrote:
> > Ernesto Hernandez-Novich wrote:
> > >La solución final, y más elegante, es hacer la ligadura de variables del
> > >programa a las variables libres, i.e. vincular una variable $cedula al ?
> > >en el query, de ese modo basta hacer
> > >
> > >$cedula = "12345678"; $stmt->execute;
> 
> > No debería ser:
> > $stmt->execute($cedula);
> 
> No, precisamente en el párrafo previo hago énfasis en vincular la
> variable al ?. Esa vinculación _no_ es en el execute(), sino utilizando
> la rutina bind_param() que _adrede_ no incluí.
> 
> > Para lo cual el orden de izquierda a derecha en que aparezcan los ? ,
> > serán reemplazados
> > por las variables debidamente "comilladas" según el tipo de datos.
> 
> Precisamente el uso de ligadura te permite olvidarte del "orden" y
> simplemente agregas y quitas variables a tu consulta posicionalmente.
> 
> > En caso de que se quiera efectuar este tipo de comportamiento,
> > tendrás que "ligar" estas variables con los "Marcadores de lugar" o
> > Placeholders,
> 
> Eso es lo que quise decir con vincular.



More information about the caracas-pm mailing list