$dbh->prepare a bindovani parametru
Honza Pazdziora
adelton na fi.muni.cz
Čtvrtek Srpen 12 11:24:24 MEST 1999
Martin Caslavsky vecer po zatmeni napsal:
> potreboval bych udelat "select from neco where kde like 'tam_'", pricemz to
> "tam" chci zadavat az pri execute, ale porad nejsem schopen neceho takovyho
> docilit.
Je nutno si uvedomit, ze pri bindovani parametru se nahrazuje otaznik
tim celym 'tam_'.
> Kdyz dam
> $sth = $dbh->prepare("select from neco where kde like '?_'")
> tak pry execute called with 1 bind variables when 0 are needed
Tohle je proto, ze se proste snazite hledat like '?_' a zadna magie v
tom neni, magie (placeholdery) je jenom pokud ten otaznik stoji v tom
SQL dotazu sam o sobe. Proste je uplne jedno, jestli mate like 'jezek',
like 'je?zek', like '?', v zadnem z techto pripadu o bindovani
parametru nejde.
> a kdyz zkusim
> $sth = $dbh->prepare("select from neco where kde like ?_")
> (teda bez uvozovek), tak zase rika, ze parse error blízko ''tam'' na řádku 1
Tohle uz je zajimavejsi: rika Vam to, ze parse error u tam, i kdyz
tomu preparu jste zadne tam nedaval. Plyne to z toho, ze u MySQL dela
bindovani paramteru ten DBD::mysql ovladac, anzto MySQL nativne bind
parametru nepodporuje. V podstate u MySQL dochazi k tomu, ze ten
otaznik je preplacnut tim 'tam', takze vysledny dotaz je like 'tam'_.
> Potom jsem si procetl dokumentaci a zjistil, ze existuje funkce bind_param,
> ale kdyz ji pred execute zavolam jako $sth->bind_param(1, "$prom_") tak mi
> zase tvrdi, ze "execute called with 0 bind variables when 1 are needed"
No, tipnul bych si, ze promennou $prom_ nemate (podtrzitko je legalni
znak jmena promenne), takze tohle je vlastne $sth->bind_param(1, ""),
ale proc Vam to nenabinduje jako prazdny string, to nevim.
> Da se neco takovyho napsat popripade jak?
> Podotykam, ze to ma byt pro MySQL.
Mate nekolik moznosti: bud budete mit kus toho retezce (to podtrzitko)
uz v tom SQL dotazu, pak by to bylo
kde like concat(?, '_')
a executu date jenom tu $prom. MySQL neumi spojovat retezce pomoci
standardniho ||, jak by to treba vzal Oracle. Anebo si nachystate
pekne bokem retezec $prom.'_' (nebo "${prom}_") a volate
kde like ?
S pozdravem,
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
make vmlinux.exe -- SGI Visual Workstation Howto
Any spam sent to my email will be rewarded by complaint to your ISP abuse
team and abuse teams of servers that relayed that message. It works.
Další informace o konferenci Perl