Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Rinat H. Sadretdinow                 2:5020/400     09 Jun 2003  18:13:34
 To : All
 Subject : DBI, Perl и плейсхолдеры
 -------------------------------------------------------------------------------- 
 
 Hello world!
 
 Чего-то у меня какие-то непонятные непонятки с placeholders творятся.
 Если код такой (с кавычками в prepare и без кавычек в execute):
 
 === cut ===
 my $baz = "dummy string";
 
 my $sth = $dbh->prepare ("
     select foo
     from foo_table
     where upper(bar)=\'?\'") or die $dbh->errstr;
 
     $sth->execute (uc ($baz)) or die $dbh->errstr;
 
     my @row = $sth->fetchrow_array;
 === cut ===
 
 то при выполнении возникает ругань вида:
 
 execute called with 1 bind variables when 0 are needed at XYZ.pl line XY.
 
 если код такой (без кавычек в prepare и с кавычками в execute):
 
 === cut ===
 my $baz = "dummy string";
 
 my $sth = $dbh->prepare ("
     select foo
     from foo_table
     where upper(bar)=?") or die $dbh->errstr;
 
     $sth->execute ("\'" . uc ($baz) . "\'") or die $dbh->errstr;
 
     my @row = $sth->fetchrow_array;
 === cut ===
 
 то ругани не возникает, но ничего и не выбирается, @row всегда
 приходит пустой. А если upper case делается в отдельную переменную,
 то всё работает нормально, и без ругани, и находит то, что надо:
 
 === cut ===
 my $baz = "dummy string";
 my $ubaz = uc ($baz);
 
 my $sth = $dbh->prepare ("
     select foo
     from foo_table
     where upper(bar)=\'$ubaz\'") or die $dbh->errstr;
 
     $sth->execute or die $dbh->errstr;
 
     my @row = $sth->fetchrow_array;
 === cut ===
 
 Почему так? Если не пользоваться одинарными кавычками, то всё
 нормально в любом случае, но одинарные кавычки нужны, потому
 как $baz может содержать не одно слово и тогда уже возникнет
 ошибка SQL насчёт invalid token, за который драйвер принимает
 второе слово $baz.
 
 --
 Пока!
 --- ifmail v.2.15dev5
  * Origin: SYS3175 (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 DBI, Perl и плейсхолдеры   Rinat H. Sadretdinow   09 Jun 2003 18:13:34 
 Re: DBI, Perl и плейсхолдеры   Denis Poznyakov   10 Jun 2003 11:17:18 
Архивное /ru.perl/657751c0436d.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional