Ciao a tutti,
oggi mi è uscito un problema piuttosto strano e sul quale non so che pesci prendere....
Ho questa funzione che non fa altro che una semplice query su un db postgresql...
/**
* @Route("/api/find/{intent}/{lang}/", name="find_intent")
*/
public function find_intent($intent, $lang='EN')
{
$this->get('logger')->info('ApiController::find_intent' );
$em = $this->get('doctrine')->getManager();
$query = $em->createQuery(
'SELECT distinct i.intent
FROM AppBundle:Intent i
WHERE i.intent like :intent and i.lang = :lang
ORDER BY i.intent ASC'
)->setParameter('intent', '%' . $intent . '%')
->setParameter('lang', $lang);
$intents = $query->getResult();
$intents_array = array();
for ($i = 0; $i < count($intents); $i++) {
$intents_array[] = trim( $intents[$i]['intent'] );
}
return new JsonResponse(
array(
'intent_list' => $intents_array,
'status' => 200
));
}
Il problema è che ha sempre funzionato tranne in un caso specifico: $intent = "intent_en_"; se l'utente digita "intent_english_", la query funziona....
Ho letto che la coppia LIKE e underscore assume una funzione di pattern matching...cosa che io ovviamente non voglio...
Vi chiedo: come posso risolvere? C'è una qualche funzione che mi permetta di fare l'escape prima di darlo in pasto a doctrine????
Grazie a tutti per l'aiuto,
Alex