Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Prosta szukajka z PDO
Watt
post
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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
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
Go to the top of the page
+Quote Post
Watt
post
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?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
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 (IMG:style_emoticons/default/smile.gif)

a jesli chcesz robic LIKE, to się zastanów jak to ma być poprawnie (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 29.09.2025 - 11:40