2013-08-30 65 views
29

Jak mogę z mysqli zrobić zapytanie z LIKE i uzyskać wszystkie wyniki?php mysqli przygotowane oświadczenie LIKE

To jest mój kod ale dosn't pracy:

$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(); 

Ten kod nie wydają się działać. Wiele przeszukałem. Może również zwrócić więcej niż 1 wiersz. Jak mogę uzyskać wszystkie wyniki, nawet jeśli zwraca więcej niż 1 wiersz?

+1

Proszę zdefiniować "nie działa" - błąd PHP? Błąd MySQL? Brak błędu, ale 0 wyników? –

+0

Chcę przelecieć przez wszystkie wyniki. Jak mogę to zrobić? Kiedy mówię, nie działa. To nic nie zwraca ... – user2493164

+0

nie ma operatora zwrotu w tym kodzie. ** Jak to jest zwrócić wszystko? ** –

Odpowiedz

48

Oto jak prawidłowo pobrać wynik

$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}"; 
} 

lub można również zrobić:

$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"; 
} 

Mam nadzieję, że zdajesz sobie sprawę, dostałem odpowiedź bezpośrednio od ręcznego here i here, czyli tam, gdzie powinieneś pójść pierwszy.

+2

W obronie OP, żadna strona manualna nie wspomina o porównaniu "funkcja" –

21

Jako alternatywę dla danej odpowiedzi powyżej można również korzystać z funkcji MySQL CONCAT tak:

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

co oznacza, że ​​nie trzeba zmieniać swoją wartość $param ale robi dla nieco dłuższych zapytań.

+0

Hi jest concat bezpieczne od wtrysku sql? Pytam, ponieważ ma cytaty. Dzięki –

+0

@mikevorisis Tak, jest to bezpieczne, ponieważ zapytanie jest nadal sparametryzowane (* za pomocą '?' *). cytaty są, ponieważ MySQL CONCATenating trzy ciągi. – Martin

+0

ok Dzięki @Martin –