Sto tentando di scrivere una ricerca per parole chiave utilizzando istruzioni preparate PDO. Idealmente, mi piacerebbe utilizzare l'operatore LIKE per cercare una sottostringa all'interno del valore del campo. Ecco il mio codice:Utilizzo dell'operatore LIKE con% per una ricerca di parole chiave con istruzioni preparate PDO
$statement = $this->db->prepare("select * from whatever where title like ? or author like ?");
$statement->execute(array("%$titleKeyword%","%$authorKeyword%"));
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
Sfortunatamente, $ file è sempre vuoto quando provo questo. Tuttavia, se copio l'SQL in phpMyAdmin e sostituisco '% keyword%' per ognuno dei? simboli, funziona bene (ottengo risultati quando esiste la parola chiave utilizzata).
Ho anche provato il seguente codice:
$statement = $this->db->prepare("select * from whatever where title like :titleKeyword or author like :authorKeyword");
$statement->bindValue(":titleKeyword", '%'.$titleKeyword.'%', PDO::PARAM_STR);
$statement->bindValue(":authorKeyword", '%'.$authorKeyword.'%', PDO::PARAM_STR);
$statement->execute();
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
avevo letto in un'altra domanda che si suppone di includere l'% durante l'associazione dei parametri, non nel SQL stesso (dichiarazione pre-preparati), ma quello non funziona.
Potrei ricorrere semplicemente all'inserimento della parola chiave direttamente nell'SQL (dopo aver effettuato un po 'di disinfezione), ma voglio attenermi alle dichiarazioni preparate. Qualsiasi aiuto sarebbe molto apprezzato.
Ho appena fatto un rapido scherzo a questo e lavorando bene (PHP 5.3.5) ~ Sicuramente vuoi aggiungere il tuo '%' quando leghi i valori. Forse problemi con il tuo $ titleKeyword e $ authorKeyword? – TerryProbert
Purtroppo no. Ho controllato quelli prima di postare qui. – Randy