php mysqli preparado declaración LIKE



Answers

Actualizado

A partir de los comentarios, se descubre que los caracteres comodín LIKE ( _ y % ) no se escapan por defecto en las consultas paramaterizadas y pueden causar resultados inesperados.

Por lo tanto, cuando utilice declaraciones "LIKE", use esta Regex de "búsqueda negativa" para garantizar que estos caracteres se escapen:

$param = preg_replace('/(?<!\\\)([%_])/g', '\\\$1',$param);

Como alternativa a la respuesta dada anteriormente, también puede usar la función MySQL CONCAT esta manera:

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

Lo que significa que no necesita editar su valor de $param , pero sí hace consultas un poco más largas.

Question

¿Cómo puedo con mysqli hacer una consulta con LIKE y obtener todos los resultados?

Este es mi código pero no funciona:

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

Este código no parece funcionar. Lo he buscado mucho. También puede devolver más de 1 fila. Entonces, ¿cómo puedo obtener todos los resultados incluso si devuelve más de 1 fila?




Links