2012-03-22 7 views
1

どのようにPDOを使用して列でフィルターをかけますか?私は以下を持っています:PDOを使用した単純なMySQL SELECT

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

これは明らかに最後の4つの結果を返します。感謝を

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

:私は1つの以上のステップを追加し、そうcategory

という名前の特定の列でそれをフィルタリングする、のようなものにしたいです!私は名前付きパラメータを用いてプリペアドステートメントを使用することをお勧めし

答えて

4

:それは文字列である場合

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

PDOが自動的にcategoryパラメータの前後に引用符をラップします。上記の場合には、あなたはが$category変数の前後に引用符が必要なのですこと

$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'); 

注:$categoryの値は信頼できないソースから来ていない場合は、次のよう

は、あなたのコードを変更することができますあなた自身でクエリ文字列を作成しているからです。

+0

「SELECT」がユーザ生成されていない場合はバインディングが必要ですか? –

+1

@Justin:SQLでは ':category'の前後に引用符は必要ありません。実際に、それらをインクルードすると ':category'はパラメータではなくリテラル文字列として解釈されます。 – cHao

+0

@Justinᚅᚔᚈᚄᚒᚔありがとう! –

関連する問題