2012-03-22 4 views
1

Comment filtrer par colonne avec PDO? J'ai ce qui suit:Simple MySQL SELECT avec PDO

$sth = $dbh->query('SELECT * from blog ORDER BY date DESC LIMIT 4'); 

Ceci évidemment renvoie les 4 derniers résultats. Je veux ajouter une étape supplémentaire et filtrer par une colonne spécifique nommée category

Donc, quelque chose comme:

$sth = $dbh->query('SELECT * from blog WHERE category=NAME-HERE ORDER BY date DESC LIMIT 4'); 

Merci!

Répondre

4

Je suggère d'utiliser les commandes préparées avec des paramètres nommés:

$stmt = $dbh->prepare("SELECT * FROM blog WHERE category=:category ORDER BY date DESC LIMIT 4"); 
$stmt->bindParam(':category', $category); 
$stmt->execute(); 

PDO se replient automatiquement des guillemets autour du paramètre category si elle est une chaîne.

Si la valeur de $category ne provient pas d'une source non fiable, vous pouvez modifier votre code comme suit:

$sth = $dbh->query("SELECT * from blog WHERE category='$category' ORDER BY date DESC LIMIT 4"); 
/** OR **/ 
$sth = $dbh->query('SELECT * from blog WHERE category="'.$category.'" ORDER BY date DESC LIMIT 4'); 

Notez que dans le cas ci-dessus, vous faites ont besoin des guillemets autour de la variable $category puisque vous construisez la chaîne de requête vous-même.

+0

La liaison est-elle obligatoire si SELECT n'est pas généré par l'utilisateur? –

+1

@Justin: Vous n'avez pas besoin des guillemets autour de ': category' dans le SQL quand même. En fait, si vous les incluez, ': category' serait interprété comme une chaîne littérale, pas un paramètre. – cHao

+0

@Justin ᚅᚔᚈᚄᚒᚔMerci! –