🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
5 messages
5 total messages Started by Ludwik Dylag Mon, 10 Aug 2009 23:12
Postgres 8.3.X + zapytanie LIKE
#51562
Author: Ludwik Dylag
Date: Mon, 10 Aug 2009 23:12
13 lines
1697 bytes
Witam,

używam modułu DBD::Pg aby dostać się Perlem do bazy PostgreSQL.
Schemat budowy i wykonania zapytania jest następujący:
$my_query = $dbh->prepare("select id from table where column = ? );
$my_query->execute($wartosc);
i tu wszystko działa. Problem pojawia się, kiedy chcę użyć klauzuli
LIKE:
$my_query = $dbh->prepare("select id from table where column LIKE ? );
$my_query->execute('%'.$wartosc.'%');
to niestety nie działa (nie ma błędu, ale zapytanie zwraca 0 rekordów,
podczas gdy powinno zwrócić kilka)
w jaki sposób wskazać perlowi aby brał zmienną razem z '%' ?
Re: Postgres 8.3.X + zapytanie LIKE
#51563
Author: Maciej Misiak
Date: Tue, 11 Aug 2009 05:46
23 lines
1889 bytes
> Witam,
> 
> używam modułu DBD::Pg aby dostać się Perlem do bazy PostgreSQL.
> Schemat budowy i wykonania zapytania jest następujący:
> $my_query = $dbh->prepare("select id from table where column = ? );
> $my_query->execute($wartosc);
> i tu wszystko działa. Problem pojawia się, kiedy chcę użyć klauzuli
> LIKE:
> $my_query = $dbh->prepare("select id from table where column LIKE ? );
> $my_query->execute('%'.$wartosc.'%');
> to niestety nie działa (nie ma błędu, ale zapytanie zwraca 0 rekordów,
> podczas gdy powinno zwrócić kilka)
> w jaki sposób wskazać perlowi aby brał zmienną razem z '%' ?

Nie mam pod ręką środowiska żeby sprawdzić, ale czy nie powinno być z apostrofami:
$my_query = $dbh->prepare("select id from table where column LIKE '?' );
?

-- 
grizzley

-- 
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Postgres 8.3.X + zapytanie LIKE
#51564
Author: Stachu 'Dozzie' K.
Date: Tue, 11 Aug 2009 07:47
24 lines
1890 bytes
On 11.08.2009, Maciej Misiak wrote:
>> Witam,
>> 
>> używam modułu DBD::Pg aby dostać się Perlem do bazy PostgreSQL.
>> Schemat budowy i wykonania zapytania jest następujący:
>> $my_query = $dbh->prepare("select id from table where column = ? );
>> $my_query->execute($wartosc);
>> i tu wszystko działa. Problem pojawia się, kiedy chcę użyć klauzuli
>> LIKE:
>> $my_query = $dbh->prepare("select id from table where column LIKE ? );
>> $my_query->execute('%'.$wartosc.'%');
>> to niestety nie działa (nie ma błędu, ale zapytanie zwraca 0 rekordów,
>> podczas gdy powinno zwrócić kilka)
>> w jaki sposób wskazać perlowi aby brał zmienną razem z '%' ?
>
> Nie mam pod ręką środowiska żeby sprawdzić, ale czy nie powinno być z apostrofami:
> $my_query = $dbh->prepare("select id from table where column LIKE '?' );
> ?

Nie, nie powinno. Inaczej zapytanie bedzie szukac czegos pasujacego do
'?', czyli dokladnie pytajnika.

-- 
Stanislaw Klekot
Re: Postgres 8.3.X + zapytanie LIKE
#51566
Author: Paweł Matejski
Date: Tue, 11 Aug 2009 11:44
19 lines
1753 bytes
Ludwik Dylag wrote:
> Witam,
> 
> używam modułu DBD::Pg aby dostać się Perlem do bazy PostgreSQL.
> Schemat budowy i wykonania zapytania jest następujący:
> $my_query = $dbh->prepare("select id from table where column = ? );
> $my_query->execute($wartosc);
> i tu wszystko działa. Problem pojawia się, kiedy chcę użyć klauzuli
> LIKE:
> $my_query = $dbh->prepare("select id from table where column LIKE ? );
> $my_query->execute('%'.$wartosc.'%');
> to niestety nie działa (nie ma błędu, ale zapytanie zwraca 0 rekordów,
> podczas gdy powinno zwrócić kilka)
> w jaki sposób wskazać perlowi aby brał zmienną razem z '%' ?

A skąd wiesz, że nie bierze? Włącz w postgresie logowanie zapytań i zobacz co faktycznie jest wysyłane do postgresa.

-- 
P.M.
Re: Postgres 8.3.X + zapytanie LIKE
#51565
Author: A.L.E.C
Date: Tue, 25 Aug 2009 09:35
16 lines
1501 bytes
Stachu 'Dozzie' K. wrote:

>> Nie mam pod ręką środowiska żeby sprawdzić, ale czy nie powinno być z apostrofami:
>> $my_query = $dbh->prepare("select id from table where column LIKE '?' );
>> ?
> 
> Nie, nie powinno. Inaczej zapytanie bedzie szukac czegos pasujacego do
> '?', czyli dokladnie pytajnika.

Nie, nie będzie ;) Wystąpi błąd przy execute() z powodu "called with 1 bind
variables when 0 are needed".

-- 
Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252
LAN Management System Developer http://lms.org.pl
Roundcube Webmail Project Developer http://roundcube.net
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads