November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Tuesday, December 6th, 2005 12:00 pm
perl 5.8.7 + DBD::Sybase 1.00 + freetds 0.63 и всё это в MS SQL 2000


"SELECT count(*) from SOMETABLE WHERE PARENT_ID = 2"
работает и выдает правильный результат.


В инструкции написано:
DBD::Sybase supports the use of ? placeholders in SQL statements as long as the underlying library and
database engine supports it.
Ещё конкретнее
syb_dynamic_supported (bool)
This is a read-only attribute that returns TRUE if the dataserver you are connected to supports
?-style placeholders. Typically placeholders are not supported when using DBD::Sybase to connect
to a MS-SQL server.

вот он после коннекта равен 1.

Но конструкция
$sth = $dbh->prepare("SELECT count(*) from SOMETABLE WHERE PARENT_ID = ?");

вылетает с сообщением
ct_send(CS_DESCRIBE_INPUT) returned 0 at /usr/lib/perl5/DBD/Sybase.pm line 124.
Segmentation fault

еще на этапе prepare, до execute дело не доходит.

В 124 строке вышеупомянутого файла написано:

DBD::Sybase::st::_prepare($sth, $statement, @attribs)
or return undef;

Вопрос: это я что-то неправильно делаю, или оно таки не поддерживается сервером или freetds'ом?

Очень уж не хочется вручную все входные данные проверять и префиксировать, хочется идеологически правльное решение использовать.
Tuesday, December 6th, 2005 11:17 pm (UTC)
Этот вопрос очень спорный, см. напр. http://www.theserverside.net/news/thread.tss?thread_id=31953#158113