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...
È stato utile?

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
scroll top