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 строки?
Ответы
Ответ 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";
}
Надеюсь, вы поняли, что я получил ответ прямо из руководства здесь и здесь, где вы должны были пойти первым.
Ответ 2
В качестве альтернативы данному ответу вы также можете использовать функцию CONCAT MySQL:
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') ");
$stmt->bind_param("s", $param);
$stmt->execute();
Это означает, что вам не нужно редактировать значение $param
, но делать несколько более длинные запросы.