重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

php初心者です。
(DB:mysqlをphp(PDO)で操作)

最近PDOの勉強をし始めましたが、記述の際に
(接続に関する部分)と(クエリに関する部分)
の記述位置に関してのルールがはっきりしません。

上記2つを続けて記述をすれば問題なく動くのですが、例えば、
-----------------------------------------------------------------------
try{ $link = new PDO($db, $user, $pass);
}catch(PDOException $e){
echo 'データーベースに接続できません。' . $e->getMessage();
}
-----------------------------------------------------------------------
だけ先に記述しておき(接続しておいて)、その後htmlやphpの記述をはさみ、
必要な部分で以下のように(クエリ)の記述をした場合、動きません。

<?php
$stmt = $link->query('SELECT * FROM booked order by rsvTime asc');
?>

<table border="1">
<tr>
<th>予約時間</th>
<th class="wdt_at">施術開始</th>
<th class="wdt_at">施術終了</th>
<th>予約未、済</th>
</tr>
<?php
if (!$stmt) {
$info = $link->errorInfo();
exit($info[2]);
}
        
      (※ここでクエリしたものを使用)
            ↓
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print "<tr>\n";
print "<td>".htmlspecialchars($row["rsvTime"])."</td>\n";
print "<td>".htmlspecialchars($row["startTime"])."</td>\n";
print "<td>".htmlspecialchars($row["finishTime"])."</td>\n";
print "<td>".htmlspecialchars($row["kafuka"])."</td>\n";
print "</tr>\n";
}
print "</table>";
?>


■質問内容
そこで質問です。PDOの接続とクエリの記述位置やその他のルールを
詳しく教えて下さい。


よろしくお願いします。

A 回答 (2件)

PHPはHTMLの中に埋め込んで使えるタイプの言語ではありますが、


DB処理の部分と出力部を完全に分けて書くようにすると、処理の流れが掴みやすく、
後からの修正も容易になりますよ。


> PDOの接続とクエリの記述位置やその他のルールを詳しく教えて下さい。

ルールとして覚えるのではなく、各行の意味(なぜその場所でそう書くのか?)を
理解する事が大切です。PDOを使った処理の流れは↓のようになります。

//-- DB処理
$link = new PDO(略);// [1] PDOのオブジェクトを生成(=DBへの接続)
$stmt = $link->query('SELECT...');// [2] 接続したDBに対してクエリ(SELECT文)を発行
$rows = $stmt->fetchAll(略);// [3] 発行したクエリの結果を受け取る

//-- 出力
print_r($rows);

SELECT文の発行~出力までの基本は、これだけです。


> 先に記述しておき(接続しておいて)、その後htmlやphpの記述をはさみ、
> 必要な部分で以下のように(クエリ)の記述をした場合、動きません。

まずは、上記が動く状態で、var_dump($link, $stmt, $rows); としてみて、
それぞれの変数の中身を確認してみてください。

その後、自分なりに色々アレンジしてみて、動かなくなってしまったら、
同様に var_dump($link, $stmt, $rows); としてみると良いでしょう。
    • good
    • 0
この回答へのお礼

参考になる考え方とアドバイスいただきありがとうございます。
(var_dumpで中身の確認する手法、今後役に立ちそうです。)

ありがとうございました。

お礼日時:2013/05/28 14:09

エラーは出てないということなのでしょうけど、動かない状況の詳細をもうちょっと欲しいところです。

phpでのwarningすらも表示しない設定になってるような気がする。
でも、みなおすと、pdo の実行順というより、htmlの記述の方に問題有りそう。
</tr> と <tr> の間つまり行間で、文字列出力すると、最近のブラウザは、table の枠の外に表示したりして、どこに何が表示されてるか解らなくなります。場合によっては、出力されたhtmlソースをみて初めてwarning表示に気付く。
<table> 出力前に sql文を発行したなら、その直後で、 errorInfo チェックを行って下さい
エラーがなければ、<table>用の文字列を出力していくようにします。
また、最後の閉じタグ</table> がないと、表は全く表示されなくなるブラウザも有りますのでこれも注意して下さい。
まずは、html文法で、どこにどの文字列をはさんでよいのか把握する方が先なのでは?

あと、ごく初歩的ですが、離れたところに記述してるせいで、途中で、$link 変数に別なデータを入れてしまったりなどもあるので、どの変数がどこで使われてるかなどもしっかり把握しておく必要があります。まあ、ちょっとしたタイプミスで意図せずそうなることもあるので、var_dump() でのチェックは有用です。
    • good
    • 0
この回答へのお礼

細かい点まで参考になるご説明をいただきありがとうございます。
1つ1つチェックしていきたいと思います。

お礼日時:2013/05/28 14:27

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

関連するカテゴリからQ&Aを探す