Aqui está minha tentativa:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
Descobri logo depois de postar:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
echo $results['column'];
}
like
forem usados? como o array de execução deve ser executado em ordem?Para aqueles que usam parâmetros nomeados, veja como usar
LIKE
com%
correspondência parcial para bancos de dados MySQL :onde está o parâmetro nomeado
:dangerousstring
.Em outras palavras, use
%
sinais explicitamente sem escape em sua própria consulta que são separados e definitivamente não são a entrada do usuário.Editar: a sintaxe de concatenação para bancos de dados Oracle usa o operador de concatenação:,
||
então ele simplesmente se tornará:No entanto, existem ressalvas, pois @bobince menciona aqui que:
Portanto, isso é outra coisa a se observar ao combinar curtir e parametrização.
fonte
LIKE CONCAT('%', :something, '%')
. Referência: stackoverflow.com/a/661207/201648SELECT * FROM calculation WHERE ( email LIKE '%' || luza || '%' OR siteLocation LIKE '%'|| luza ||'%' OR company LIKE '%' ||luza ||'%' )
que me daria um erro.and it means named placeholders can be used
. Como é mesmo um problema com espaços reservados nomeados quando você concatena em PHP? Obviamente, a concatenação em PHP oferece suporte a nomes e posições e é mais portátil, pois você pode usar a mesma consulta para qualquer banco de dados. Eu realmente não entendo por que tantas pessoas pensam que há alguma diferença entre marcadores de posição nomeados e posicionais.fonte
bindValue
protege contra ataques de injeção? A resposta aceita basicamente nega o valor de usar?
marcadores de posição, concatenando a string de pesquisa para%
like nos dias de antigamente.Você também pode tentar este. Eu enfrento problema semelhante, mas obtive resultado após pesquisa.
fonte
Isso funciona:
fonte
Eu peguei isso de ilusões php
E funciona para mim, muito simples. Como ele diz, você deve "preparar nosso literal completo primeiro" antes de enviá-lo para a consulta
fonte
O PDO escapa "%" (pode levar à injeção de sql) : O uso do código anterior fornecerá os resultados desejados ao procurar strings parciais, MAS se um visitante digitar o caractere "%", você ainda obterá resultados mesmo que não Não tenho nada armazenado na base de dados (pode levar a injeções de sql)
Eu tentei muitas variações, todas com o mesmo resultado O PDO está escapando de "%" levando a resultados de pesquisa indesejados / não excitados.
Achei que valeria a pena compartilhar se alguém encontrou uma palavra sobre isso, compartilhe
fonte