2013-05-31 2 views
0

J'ai créé un formulaire qui enverra la valeur de la plage de recherche à la base de données, mais il semble ne pas fonctionner.Charlist générique SQL utilisant l'instruction PHP PDO

La requête:

$alpha = $_POST['alpha']; 
$sql = "SELECT * FROM tbl_members WHERE resultselect=? AND lname LIKE ?;"; 
$q = $conn->prepare($sql); 
$q->execute(array($categoryid,"[".$alpha."]%")); 

La forme:

<form action="" method="post"> 
    <button class="btn btn-link" value="abc" name="alpha">A-B-C</button> 
    <button class="btn btn-link" value="def" name="alpha">D-E-F</button> 
</form> 
+0

Qu'est-ce que vous utilisez SGBDR (MySql, SQL Server, Oracle ...)? – peterm

+0

Je me sers de mysql –

Répondre

0

Puisque vous utilisez Mysql vous pouvez utiliser REGEXP

$alpha = $_POST['alpha']; 
$sql = "SELECT * FROM tbl_members WHERE resultselect=? AND lname REGEXP ?;"; 
$q = $conn->prepare($sql); 
$q->execute(array($categoryid,"^[".$alpha."]")); 

Avec LIKE votre requête devrait ressembler

SELECT * FROM tbl_members 
WHERE resultselect=? 
    AND (lname LIKE 'a%' 
    OR lname LIKE 'b%' 
    OR lname LIKE 'c%') 

Par conséquent, votre code php dans ce cas, peut-être (en supposant que vous effectuez une recherche toujours en utilisant trois caractères)

$alpha = $_POST['alpha']; 
$sql = "SELECT * FROM tbl_members 
     WHERE resultselect=? AND lname (lname LIKE ? OR lname LIKE ? OR lname LIKE ?);"; 
$q = $conn->prepare($sql); 
$q->execute(array($categoryid, $alpha[0].'%', $alpha[1].'%', $alpha[2].'%')); 

Pour commander resultset utiliser par ordre alphabétique ORDER BY lname.

est ici SQLFiddle démo pour les LIKE et REGEXP

+0

merci peterm. Je veux que le résultat soit basé sur l'affichage alphabétique des noms. Je suis encore un débutant dans mysql.what est la différence entre le REGEXP et le LIKE cos le semblable semble me donner ce que je veux. –

+0

Aussi je l'ai essayé avec le like et regexp mais il semble ne pas afficher le jeu de résultats dans l'ordre alphabétique. –

+0

@CharlesOkaformbah Voir la réponse mise à jour pour les liens vers la documentation à la fois pour 'LIKE' et' REGEXP' et une démo sqlfiddle. En fin de compte les deux sont des moyens pour la correspondance de modèle, mais 'LIKE' est très basique et limité à seulement deux caractères génériques'% 'et '_'. Avec 'REGEXP', vous pouvez utiliser des expressions régulières plus sophistiquées. C'est votre choix quoi utiliser. J'ai donné des exemples pour les deux. Au final, les résultats seront les mêmes. – peterm