これ何て呼びますか

タイトルと本文だけを投稿するブログのようなものを練習として作っています。そこで分からないことがあります。

投稿フォームよりタイトルと本文を投稿して、index.php に一覧(記事のタイトル)を表示させています。そして、一覧のそれぞれの記事タイトルより、個別記事にリンクしたいと思いますが、リンク先の個別記事のデータをSELECTする方法が分かりません。

・記事のテーブル名: post
・カラム no / title / content

index.php(一覧) から article.php(個別記事)へ urlに 記事のnoを加えてリンクさせています。そして、article.php のurlの記事noを where句に指定して、記事を表示したいと考えています。

しかし、where句をどのように書けばよいのかが分かりません。例えば、記事noが 12 である場合、 /article.php?no=12 とリンクされてきた時に、どのように 12 を取得してwhere句で指定するのかが分かりません。

↓ この文の? の部分をどのようにすればよいのか教えてください。
$st = $dbh->query("SELECT * FROM post WHERE no=?");

A 回答 (1件)

>どのように 12 を取得してwhere句で指定するのか



GETで渡しているので$_GETを利用します

とりあえずarticle.phpに対してnoを渡さないときの挙動をどうするか決める必要があります。
絞りこみ条件を指定しない場合の挙動は3つあります
・データを表示しない
・全データを表示する
 (すなわち絞り込みをしない)
・該当するデータの内、適当に1データだけ表示する
 (これはあまりお勧めできない)

見た感じPDOを前提としてよいのであれば以下
(とりあえず練習ということでワイルドカード使っているようですが
できるだけカラム名は羅列した方がよいです。)

<?PHP
try{
$dsn = 'mysql:host=localhost; dbname=testdb';
$user = 'root';
$password = 'hogehoge';
$pdo = new PDO($dsn, $user,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql="SELECT no,title,content FROM post WHERE 1 ";
$sql.=" AND no=?";
$datas=array();
$datas[]=isse($_GET["no"])?$_GET["no"]:"";
$stmt = $pdo->prepare( $sql);
$stmt->execute($datas);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
}catch(PDOException $e){
die($e->getMessage());
}

絞り込みの方法は原則WHERE 1に対して、絞り込み条件を付加していく
今回のケースだとnoが指定されていない場合でもno=""をチェックするので
データが表示されない

WHERE 1 AND 条件1 AND 条件2 AND 条件3・・・
もしくは
WHERE 0 OR 条件1 OR 条件2 OR 条件3・・・
のどちらかだけど、場合によっては
WHERE 1 AND (0 OR 条件1 OR 条件2) AND 条件3・・・
的なことも必要になる場合があります
    • good
    • 0
この回答へのお礼

ありがとうございます。説明不足でありながらも、回答いただいてありがとうございます。推測されたとおりPDOで接続していました。

$_GETやWHERE句の書き方がとても勉強になりました。
PHPの書籍を数冊購入しましたが、基本系とそのサンプルがあるくらいなので、理解しにくくて困っているところでした。 丁寧に解説いただいて感謝します。

お礼日時:2016/04/13 17:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!