php mysqli подготовленный оператор LIKE

Как я могу с mysqli сделать запрос с LIKE и получить все результаты?

Это мой код, но он не работает:

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

Этот код, похоже, не работает. Я много искал. Также он может возвращать более 1 строки. Итак, как я могу получить все результаты, даже если он возвращает более 1 строки?

Вот как вы правильно получаете результат

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

или вы также можете:

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

Надеюсь, вы поняли, что я получил ответ прямо из руководства здесь и здесь , где вы должны были пойти первым.

В качестве альтернативы данному ответу вы также можете использовать функцию MySQL CONCAT, таким образом:

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

Это означает, что вам не нужно редактировать значение $param но оно делает несколько более длительные запросы.