|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/657751c0436d.html, оценка из 5, голосов 10
|