Autor Zpráva
siok
Profil
Mám tento dotaz:
$query = $pdo->prepare("SELECT * FROM ".DBPREFIX."product INNER JOIN ".DBPREFIX."stock ON (pro_id=sto_pro_id) WHERE sto_ean = :ean AND pro_id = :kod");
    $query->execute(array(":ean"=>$_POST['n_ean'],":kod"=>$_POST['n_kod']));
A chtěl bych se zeptat jak udělat aby tento dotaz fungoval i v případě že proměnná $_POST['n_kod'] bude prázdná.
Ikki
Profil
WHERE pro_id IS NULL, ale nejsem si jistý.
siok
Profil
Ikki:
v databázi je n_kod vždy vyplněný. Jen ten produkt chci vyhledat bud podle Kodu ($_POST['n_kod']) nebo EAN ($_POST['n_ean']). Přes formulář odešlu jednou dotaz aby vyhledal podle kodu a jednou podle EAN. Tak jak to mám ted napsaný to bude fungovat jen když odešlu jak kod tak EAN naráz.
Kajman
Profil
Nejlepší je upravovat dotaz a pokud se podle toho sloupce filtrovat nemá, vůbec ho ve where části nepoužívat.
siok
Profil
Kajman:
Děkuji, ale to co jste mi poradil tak vím, ale přesně na toto jsem se ptal jak to udělat. Nejde mi o to aby mě to někdo přesně napsal ale rozumě navedl.
Keeehi
Profil
Základ by mohl vypadat takto
$conditions = [];
$parameters = [];

if(!empty($_POST['n_ean'])) {
    $conditions[] = "sto_ean = :ean";
    $parameters[":ean"] = $_POST['n_ean'];
}

if(!empty($_POST['n_kod'])) {
    $conditions[] = "pro_id = :kod";
    $parameters[":kod"] = $_POST['n_kod'];
}

$sql = "SELECT * FROM ".DBPREFIX."product INNER JOIN ".DBPREFIX."stock ON (pro_id=sto_pro_id)";

if(!empty($conditions)) {
    $sql .= " WHERE ".implode(" AND ", $conditions);
}

$query = $pdo->prepare($sql);
$query->execute($parameters);

Nejsem si jistý jak se chová execute v případě že dostane prázdné pole. Pokud by to byl problém, tak se to dá nahradit
$query->execute(empty($parameters) ? null : $parameters);
siok
Profil
Keeehi:
díky funguje to skvělo

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0