Modulo a discesa multipla PHP Invia a MySQL con OR
-
05-07-2019 - |
Domanda
Questa domanda è simile a Modulo casella di riepilogo a discesa multiplo PHP Invia a MySQL , ma con una svolta.
Supponiamo di avere una selezione multipla HTML, che viene inviata a un back-end PHP.
Come si crea elegantemente una richiesta mysql con una condizione OR sui valori di una selezione multipla?
Ad esempio, ho una selezione multipla con un elenco di sport. Come fare:
SELECT * FROM sports WHERE sport.name=:sport1 OR sport.name=:sport2 OR sport.name=:sport3...
Soluzione
Questo non è testato, solo un'idea ...
Questo non è testato, solo un'idea ...
<*>POST['sports'] = array('basketball', 'baseball', 'football', 'soccer');
$sql = sprintf("SELECT * FROM sports WHERE sport.name IN (%s)", implode( ',', array_fill(1,count( Questo non è testato, solo un'idea ...
<*>POST['sports']), '?') ) );
// SELECT * FROM sports WHERE sport.name IN (?,?,?,?)
$st = $dbh->prepare($sql);
// bind all values
foreach( Questo non è testato, solo un'idea ...
<*>POST['sports'] as $i => $sport) {
$st->bindValue( ++$i, $sport );
}
$st->execute();
Altri suggerimenti
SELECT * FROM sports WHERE sports.name IN ('football','hockey','soccer','trolling');
SELECT * FROM sports WHERE sport.name IN (basketball,baseball,football,soccer)
Dovrebbe risultare
<*>POST['sports'] = array('basketball', 'baseball', 'football', 'soccer');
$sql = sprintf("SELECT * FROM sports WHERE sport.name IN (%s)", implode(',', <*>
Dovrebbe risultare
<*>POST['sports']));
Dovrebbe risultare
<*>Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow