texto - php mysqli preparado declaración LIKE
string strip_tags (2)
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.
¿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?
Así es como traes correctamente el resultado
$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}";
}
o también puedes hacer:
$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";
}
Espero que te des cuenta de que obtuve la respuesta directamente del manual here y here , que es donde deberías haber ido primero.