2011-10-23 6 views
1

Possible en double:
How do I create a PDO parameterized query with a LIKE statement in PHP?
PHP PDO prepared statement — mysql LIKE queryrequêtes paramétrées PHP/MySQL

Je suis en train de faire un moteur de recherche pour mon site, et en ce moment je suis juste essayer pour s'assurer que la connexion est tout et bien. Voici mon code jusqu'ici:

CODE RÉVISÉ (ne fonctionne toujours pas, mais voici où je suis avec les suggestions à ce jour):

$db = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS); 
$stmt = $db->prepare("SELECT * FROM table_1 WHERE name LIKE ? ORDER BY bid DESC"); 
$stmt->bindParam(1, "%{$_GET['s']}%", PDO::PARAM_STR); 
$stmt->execute(); 
$rows = $stmt->fetchAll(); 

J'ai essayé de voir si les différents méthodes de execute feraient n'importe quoi, mais indépendamment de quelle manière ci-dessus je l'écris, je reçois le même résultat, rien. Je veux le caractère générique % là-dedans, donc il va chercher n'importe où dans name. Sur cette note, est-ce que je l'utilise correctement? Ce qui me rend le plus perplexe, c'est que lorsque je tape exactement la même requête dans PHPMyAdmin, la requête fonctionne bien, donc je suppose que je suis en train de ficher le PDO quelque part.


EDIT: PHPMyAdmin Requête:

SELECT * DE TABLE_1 WHERE nom LIKE '% Test%' DE COMMANDE PAR offre DESC LIMIT 0, 30

Ce rendement 1 résultat, comme prévu. Qu'est-ce qui différencie mon code et cette requête? :/

+0

@Matt En ce qui concerne votre montage: ma réponse éditée devrait l'expliquer. – middus

+0

@Matt Non, maintenant vous avez ajouté des guillemets autour du '?'. Ne pas. Je viens d'ajouter la bonne réponse à ma réponse pour plus de clarté. – middus

+0

Ya je me suis rendu compte que j'avais cela dans le post, le code n'a pas; ne fonctionne toujours pas. – Matt

Répondre

5

Je ne comprends pas vraiment votre question, mais je suppose que vous ne savez pas comment ajouter le %? Si oui, essayez ceci:

$stmt = $db->prepare("SELECT * FROM table_1 WHERE name LIKE ? ORDER BY bid DESC"); 
$stmt->bindValue(1, "%{$_GET['s']}%", PDO::PARAM_STR); 
$stmnt->execute(); 
// fetch and win! :-) 

Une petite explication: AOP citera le paramètre et échapper à ? correctement. Cela signifie que si vous liez hello, PDO remplacera ? par 'hello' (notez les guillemets). Par conséquent, afin d'avoir le % à l'intérieur des citations, vous devrez les ajouter à ce qui est lié, dans ce cas $_GET['s'].

+0

Il s'avère que cela fonctionnait; la sensibilité à la casse des variables dans ma table d'affichage était la raison pour laquelle cela ne fonctionnait pas, pas la connexion de requête ... – Matt

+0

Je suis content que ça l'ait fait! :) – middus

Questions connexes