1
Server / Re:PHP SQL problem s SELECT a OR
« kdy: 12. 05. 2019, 09:34:01 »S tím vším se dá jen souhlasit, má to ale jeden praktický háček: v tomto konkrétním případě se nepoužívá hodnota přímo, ale odvozený řetězec (jsou tam přidaná procenta na začátek a konec).Děkuji za názornou ukázku toho, proč by se měli lidé rovnou učit používat bindování parametrů. To, co jste napsal, je celé špatně. Ten odvozený řetězec v PHP triviálně vytvoříte kódem "%" . $querystr . "%". Mně ten kód v PHP připadá asi tak stokrát čitelnější, než libovolné skládání v SQL.
Takže jedině něco jako:Kód: [Vybrat]SELECT * FROM users WHERE firstname LIKE '%'||?||'%' OR lastname LIKE '%'||?||'%'
V každém případě: tento dotaz vždy a v každé databázi dělá FULL TABLE SCAN! Takže pokud tam někdy bude netriviální množství uživatelů, tak se databáze utaví. Na druhou stranu, pravděpodobnost je asi malá :-)V každé databázi ne, jenom v těch, které neumí LIKE přeložit na použití fulltextového indexu. Relační databáze to sice většinou nedělají a raději vás nechají použít speciální operátory pro fulltext, ale nezapomeňte, že i spousta NoSQL databází umožňuje používat pro dotazování jazyk SQL.
Kód: [Vybrat]
$lastnameParam = '%' . $lastname . '%';
$sth = $dbh->prepare("SELECT * FROM users WHERE firstname OR lastname LIKE :lastname");
$sth->bindParam(':lastname', $lastnameParam, PDO::PARAM_STR);
$sth->execute();