![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdenicznie,
Pisze w pdo od doścniedawna i nie opanowałem wszytskiego do końca. Chciałem napisać prostą szukajkę, ale aby coś wyszukać można użyc każdego z trzech pól - nazwa - opis - kategoria albo tylko dwóch albo tylko jednego. Nietety nie mam pojęcia jak napisać Selecta, który będzie szukał po nazwie o ile istnieje, opisie o ile istnieje lub kategorii o ile ona istnieje. Jeżeli jedna z nich nie istnieje (jest pusta) to nie szuka po niej, a szuka po dwóch pozostałych. Umiem tylko napisać selecta do wyszukania wszytskich warosci: Kod $powtor=$pdo->prepare('SELECT * FROM por_strona WHERE (nazwa=:par0 AND opis=:par1 AND kategoria=:par2)'); $powtor->bindValue(':par0',$nazwa); $powtor->bindValue(':par1',$opis); $powtor->bindValue(':par2',$kategoria); $powtor->execute(); $powrow=$powtor->fetch(); Czy mógłbym prosić Was o pomoc? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Opis dla czystego mysql
http://nospor.pl/wyszukiwarka-zapytanie-za...d-warunkow.html ale metoda postępowania bardzo podobna -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki!
Przepraszam, że podbijam. Zrobiłem tak jak to było napsane wyżej, no i PDO nie chce mi losować wyników (nic nie zwraca) Kod if(isset($_POST['nazwa']) OR isset($_POST['opis']) OR isset($_POST['kategoria'])){ $nazwa = htmlspecialchars(strip_tags(stripslashes($_POST['nazwa']))); $opis = htmlspecialchars(strip_tags(stripslashes($_POST['opis']))); $kategoria = htmlspecialchars(strip_tags(stripslashes($_POST['kategoria']))); $wh = array(); $wh_bind = array(); if (!empty($_POST['nazwa'])){ $wh[] = "nazwa LIKE '%:par0%' "; $wh_bind[0] = 1; } if (!empty($_POST['opis'])){ $wh[] = "opis = :par1 "; $wh_bind[1] = 1; } if (!empty($_POST['kategoria'])){ $wh[] = "kategoria = :par2 "; $wh_bind[2] = 1; } if (!empty($wh)){ $wh[] = "publiczny='1'"; $where = implode(' and ', $wh); } echo "[".$where."]"; try{ $pdo = new PDO('mysql:host='.$configDBHost.';dbname='.$configDBName, $configDBUser, $configDBPass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $powtor=$pdo->prepare('SELECT * FROM por_strona WHERE ( '. $where .' ) Limit 5;'); if($wh_bind[0]) $powtor->bindValue(':par0',$nazwa); if($wh_bind[1]) $powtor->bindValue(':par1',$opis); if($wh_bind[2]) $powtor->bindValue(':par2',$kategoria); $powtor->execute(); print_r($powtor->fetch()."aa"); Wyrzuca tylko: Cytat [nazwa LIKE '%:par0%' and publiczny='1']aa $powtor->fetch() jest puste, a gdy selectuje z bazy (przez phpmyadmin) wtedy wyniki istnieją. Co zrobiłem źle? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
to źle zbudowales:
nazwa LIKE '%:par0%' zauwaz ze dzieki pdo już nie mozesz dodawac apostrofów, jak to miales wczesniej: nazwa = :par0 czyli nie: nazwa LIKE '%:par0%' a: nazwa = :par0 i powinno dzialac ![]() a jesli chcesz robic LIKE, to się zastanów jak to ma być poprawnie ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 08:09 |