Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Prosta szukajka z PDO
Forum PHP.pl > Forum > Przedszkole
Watt
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?
nospor
Opis dla czystego mysql
http://nospor.pl/wyszukiwarka-zapytanie-za...d-warunkow.html
ale metoda postępowania bardzo podobna
Watt
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?
nospor
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 smile.gif

a jesli chcesz robic LIKE, to się zastanów jak to ma być poprawnie wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.