Domanda

Provando a fare questo genere di cose...

WHERE username LIKE '%$str%'

...ma utilizzando parametri associati alle istruzioni preparate in PDO.per esempio.:

$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Ho provato numerose permutazioni di virgolette singole e segni% e mi sto arrabbiando.

Mi sembra di ricordare di aver lottato con questo ad un certo punto prima, ma non riesco a trovare alcun riferimento.Qualcuno sa come (se?) puoi farlo bene in PDO con parametri denominati?

È stato utile?

Soluzione

Ah.Ho trovato un commento su php.net che mi ha ricordato la risposta;è necessario inserire un carattere jolly nel valore prima che bindParam venga valutato e non preoccuparsi di citarlo.Quindi, ad esempio, funziona bene:

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Altri suggerimenti

5 anni dopo, nel caso in cui qualcun altro si imbattesse in questo, ho scoperto un metodo alternativo.La soluzione accettata non era realmente fattibile per la mia situazione, ma anche questo metodo sembra portare a termine il lavoro:

$query = $db->prepare("select * FROM table WHERE field LIKE CONCAT('%',:search,'%')");
$query->bindParam(':search', $str);
$query->execute();

Non sono sicuro che ci sarà un calo delle prestazioni a causa del sovraccarico derivante dalla chiamata a CONCAT funzione, ma volevo trasmetterla come opzione.Spero che possa aiutare qualcuno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top