statement - php pdo execute
¿Cómo creo una consulta parametrizada PDO con una declaración LIKE? (6)
Lo descubrí justo después de publicar:
$query = $database->prepare(''SELECT * FROM table WHERE column LIKE ?'');
$query->execute(array(''value%''));
while ($results = $query->fetch())
{
echo $results[''column''];
}
Aquí está mi intento de hacerlo:
$query = $database->prepare(''SELECT * FROM table WHERE column LIKE "?%"'');
$query->execute(array(''value''));
while ($results = $query->fetch())
{
echo $results[''column''];
}
$query = $database->prepare(''SELECT * FROM table WHERE column LIKE ?'');
$query->bindValue(1, "%$value%", PDO::PARAM_STR);
$query->execute();
if (!$query->rowCount() == 0)
{
while ($results = $query->fetch())
{
echo $results[''column''] . "<br />/n";
}
}
else
{
echo ''Nothing found'';
}
También puedes probar este. Me enfrento a un problema similar pero obtuve el resultado después de la investigación.
$query = $pdo_connection->prepare(''SELECT * FROM table WHERE column LIKE :search'');
$stmt= $pdo_connection->prepare($query);
$stmt->execute(array('':search'' => ''%''.$search_term.''%''));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
PDO escapa "%" (puede conducir a la inyección sql) : el uso del código anterior dará los resultados deseados cuando se busca hacer coincidir cadenas parciales PERO si un visitante escribe el carácter "%" aún obtendrá resultados incluso si no lo hace t tiene algo almacenado en la base de datos (puede llevar inyecciones sql)
He intentado con muchas variaciones, todo con el mismo resultado. PDO está escapando del "%" liderando los resultados de búsqueda no deseados / no citados.
Pensé que valía la pena compartirlo si alguien ha encontrado una palabra al respecto, por favor compártelo
Esto funciona:
search `table` where `column` like concat(''%'', :column, ''%'')
Para usar Me gusta con% coincidencia parcial también puede hacer esto: column like concat(''%'', :something, ''%'')
(en otras palabras, usando signos de% explícitamente no escaneados que definitivamente no son entradas del usuario) con el parámetro nombrado :something
Editar: Una sintaxis alternativa que he encontrado es usar el operador de concatenación: ||, así que se volverá simplemente: where column like ''%'' || :something || ''%'' etc
where column like ''%'' || :something || ''%'' etc
@bobince menciona aquí que:
La dificultad surge cuando desea permitir un carácter literal
%
o_
en la cadena de búsqueda, sin que actúe como un comodín.
Así que eso es algo más a tener en cuenta al combinar me gusta y parametrización.