2016-08-17 8 views
6

To jest tablica $ _POST z mojego formularza.

Array ([prescribedid] => Array ([0] => 1 [1] => 2 [2] => 3 [3] => 9 [4] => 13) 

Chcę utworzyć zaznaczenie dla dowolnego elementu w Tablicy. Napisałem to, co daje prawidłowy WYBIERZ, ale if(), aby wyeliminować ciągnącą się LUB powoduje, że jest przylegający.

$query = "SELECT * "; 
$query .= "FROM prescribed WHERE "; 

for($i=0; $i<count($_POST["prescribedid"]); $i++) { 
    $query .= "prescribedid={$_POST['prescribedid'][$i]} "; 
     if($i < (count($_POST["prescribedid"])-1)) { 
     $query .= "OR "; 
     } 
} 

Produkuje to:

SELECT * FROM prescribed WHERE prescribedid=1 OR prescribedid=2 OR prescribedid=3 OR prescribedid=9 OR prescribedid=13 

Czy istnieje inny sposób na zgrupowaniu Wybiera lub napisać dla(), aby zrobić to czystsze, to znaczy bez ostatniej IF().

+3

'Wskazówka: Można użyć' 'IN' aby uniknąć wielokrotnych' klauzule OR'. '... WHERE przepisane IN (1,2,3,9,13) ....' – 1000111

+2

'Wskazówka:' Musisz użyć wejścia PDO lub vaidate. Ten kod może być użyty do iniekcji SQL. – ineersa

Odpowiedz

8
$values=implode(",",$_POST["prescribedid"]); 
$query = "SELECT * FROM prescribed WHERE prescribedid IN ($values)"; 

Sanitization jest na ciebie :)

2

można po prostu użyć w klauzuli tutaj.

Patrz MySQL IN clause

$query = "SELECT * FROM prescribed WHERE prescribedid IN ".implode(',', $_POST["prescribedid"]); 
4

Korzystanie z MySQL w punkcie

$ids = implode(",",$_POST["prescribedid"]); 
$query = "SELECT * FROM prescribed WHERE prescribedid IN ($ids)"; 
4

Cześć można użyć Incondition. używać imploade funkcji znaleźć przecinkami seoarated wartości

$data = array('prescribedid'=>array(1,2,3,9,14)); 
$query = 'SELECT * FROM prescribed WHERE prescribedid IN ('; 
$query .= implode(',',$data['prescribedid']).')'; 
echo $query ; 

Wyjście

SELECT * FROM prescribed WHERE prescribedid IN (1,2,3,9,14) 
+0

Nie potrzebujesz konkatenacji ciągów (i * może * powodować pewne zamieszanie, zwłaszcza w tym układzie). –