with texto strip_tags remove limpiar from eliminar allow all php sql mysqli sql-like

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.