J'essaie de faire une recherche par le biais de la classe PDO php (pilote mysql). J'ai la requête suivante travail avec le client MySQL (noms de tables changés pour protéger les innocents):PHP instruction préparée PDO - requête MySQL LIKE
SELECT hs.hs_pk,
hs.hs_text,
hs.hs_did,
hd.hd_did,
hd.hd_text,
hv.hv_text,
hc.hc_text
FROM hs
LEFT JOIN hd
ON hs.hs_did = hd.hd_did
LEFT JOIN hd
ON hd.hd_vid = hv.hv_id
LEFT JOIN hc
ON hd.hd_pclass = hc.hc_id
WHERE hs.hs_text LIKE "%searchTerm%"
LIMIT 25;
Cela fonctionne comme un charme quel que soit le terme de recherche que j'utilise. Cependant, quand je passe à php, je ne peux pas l'obtenir pour retourner quelque chose. J'ai essayé plusieurs syntaxes différentes qui semblent logiques de travailler, mais rien que j'ai essayé fonctionne. voici mon code existant:
$handle = fopen('/foo/bar/test.log', 'w+');
fwrite($handle, "doSearch, with search term: $searchTerm\n");
$sql =
'SELECT hs.hs_pk,
hs.hs_text,
hs.hs_did,
hd.hd_did,
hd.hd_text,
hv.hv_text,
hc.hc_text
FROM hs
LEFT JOIN hd
ON hs.hs_did = hd.hd_did
LEFT JOIN hd
ON hd.hd_vid = hv.hv_id
LEFT JOIN hc
ON hd.hd_pclass = hc.hc_id
WHERE hs.hs_text LIKE :searchTerm
LIMIT 25';
try {
$dbh = new PDO('mysql:host=localhost;dbname=awdb', "user", "password");
fwrite($handle, "connected to DB\n");
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));
while ($row = $prep->fetch(PDO::FETCH_ASSOC)) {
$i++;
$result[$i]['subText'] = $row['hs_pk'];
$result[$i]['subText'] = $row['hs_text'];
$result[$i]['subDid'] = $row['hs_did'];
$result[$i]['devDid'] = $row['hd_did'];
$result[$i]['devText'] = $row['hd_text'];
$result[$i]['vendorText'] = $row['hv_text'];
$result[$i]['classText'] = $row['hc_text'];
}
$dbh = null;
}
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
J'ai essayé ce qui suit aussi bien (clause SQL WHERE & prep-> exécuter des lignes sont tout ce changement):
WHERE hs.hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));
WHERE hs.hs_text LIKE "%:searchTerm%"
$ret = $prep->execute(array(':searchTerm' => $searchTerm));
WHERE hs.hs_text LIKE ":searchTerm"
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
etc ...
Il pourrait juste être un problème de transposition, mais vous n'avez pas joint votre déclaration sql - vous devez mettre une apostrophe (') à la fin de celui-ci. –
C'était un problème de transposition. Si j'avais oublié le 'je suis sûr que PHP aurait complètement flippé, lol. Merci pour la réponse extrêmement rapide, cependant. – TIm
Qu'est-ce que vous obtenez quand vous var_dump() $ dbh, $ prep et $ ret? Sont-ils des valeurs que vous attendez? Avez-vous essayé d'exécuter la même requête en utilisant la famille de fonctions mysql_ * pour la comparaison? – jkndrkn