タイトルと本文だけを投稿するブログのようなものを練習として作っています。そこで分からないことがあります。
投稿フォームよりタイトルと本文を投稿して、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=?");
No.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・・・
的なことも必要になる場合があります
ありがとうございます。説明不足でありながらも、回答いただいてありがとうございます。推測されたとおりPDOで接続していました。
$_GETやWHERE句の書き方がとても勉強になりました。
PHPの書籍を数冊購入しましたが、基本系とそのサンプルがあるくらいなので、理解しにくくて困っているところでした。 丁寧に解説いただいて感謝します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP PHP ページング データベース 1 2022/06/16 10:30
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 第二回模試の3科目の各得点と合 1 2023/04/25 18:02
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[MySQL]LOAD DATA INFILE一部レ...
-
MySQL AUTO_INCREMENTが最大に...
-
WHEREなどの条件が多い場合、ど...
-
テーブルの列数を調べたい
-
group byで最後のレコードを抽...
-
DBの定義のサイズを大きくし過...
-
GREATESTで NULLをスルーする方...
-
一部のカラムでdistinctし全て...
-
WHERE `年月日` = '晴' OR `年...
-
SQLServerでNULLを挿入したいです
-
SELECT文で、指定カラム以外の...
-
Accessの「IIF」に相当するSQL...
-
MYSQLで全てのカラムから検索す...
-
UNIONする際、片方テーブルしか...
-
複数カラムに対するLIKE文の最適化
-
INDIRECT関数の代替方法は?
-
AUTO_INCREMENTに0はダメ?
-
LIKEの右側にカラムを指定でき...
-
mysqlで50音順にorder byしたい。
-
BULK INSERT時のNull許容について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
group byで最後のレコードを抽...
-
MYSQLで小数点を表示する場合と...
-
[MySQL]LOAD DATA INFILE一部レ...
-
select * での表示が崩れる?
-
フレンドリストのようなものを...
-
WHEREなどの条件が多い場合、ど...
-
MySQL AUTO_INCREMENTが最大に...
-
時間範囲が重複したレコードを...
-
「VARCHAR(255)」を「text」に...
-
MySQL テーブルの一部のカラム...
-
データの暗号化について
-
列視点ではなく、行視点での検...
-
MySQLで、指定の複数カラムのみ...
-
このクエリを教えてください
-
MySQL 改行コードを含む文字列...
-
whereの使い方が分からないので...
-
MYSQLのレコードを上書きしたい...
-
誤って削除したIDカラムを復元...
-
SQLの範囲指定検索の質問です。
おすすめ情報