2013-08-30 19 views
29

Come posso con mysqli effettuare una query con LIKE e ottenere tutti i risultati?php mysqli istruzione preparata come

Questo è il mio codice ma dosn't lavoro:

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 
$stmt->fetch(); 

Questo codice non sembra funzionare. L'ho cercato molto. Inoltre può restituire più di 1 riga. Quindi, come posso ottenere tutti i risultati anche se restituisce più di 1 riga?

+1

Si prega di definire "non funziona" - errore PHP? Errore MySQL? Nessun errore ma 0 risultati? –

+0

Voglio scorrere tutti i risultati. Come posso fare questo? Quando dico che non funziona. Non restituisce nulla ... – user2493164

+0

non c'è operatore di ritorno in questo codice. ** Come deve restituire qualcosa? ** –

risposta

48

Ecco come si recupera correttamente il risultato

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 

while ($stmt->fetch()) { 
    echo "Id: {$id}, Username: {$username}"; 
} 

oppure si può anche fare:

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_array(MYSQLI_NUM)) { 
    foreach ($row as $r) { 
    print "$r "; 
    } 
    print "\n"; 
} 

Spero ti rendi conto ho avuto la risposta direttamente dal manuale here e here, che è dove avresti dovuto essere il primo.

+2

In difesa dell'OP, nessuna pagina manuale fa alcuna menzione della "funzione" comparativa LIKE. –

21

In alternativa alla risposta di cui sopra è anche possibile utilizzare la funzione di MySQL CONCAT così:

$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') "); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

Il che significa che non c'è bisogno di modificare il valore di $param ma fa fare per le query leggermente più lungo.

+0

Ciao è sicuro da injection sql? Sto chiedendo perché ha le virgolette. Grazie –

+0

@mikevorisis Sì, è sicuro perché la query è ancora parametrizzata (* usando '?' *). le virgolette sono perché MySQL è CONCATenating tre stringhe. – Martin

+0

ok Grazie @Martin –

Problemi correlati