
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の接続とクエリの記述位置やその他のルールを
詳しく教えて下さい。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
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); としてみると良いでしょう。
参考になる考え方とアドバイスいただきありがとうございます。
(var_dumpで中身の確認する手法、今後役に立ちそうです。)
ありがとうございました。
No.2
- 回答日時:
エラーは出てないということなのでしょうけど、動かない状況の詳細をもうちょっと欲しいところです。
phpでのwarningすらも表示しない設定になってるような気がする。でも、みなおすと、pdo の実行順というより、htmlの記述の方に問題有りそう。
</tr> と <tr> の間つまり行間で、文字列出力すると、最近のブラウザは、table の枠の外に表示したりして、どこに何が表示されてるか解らなくなります。場合によっては、出力されたhtmlソースをみて初めてwarning表示に気付く。
<table> 出力前に sql文を発行したなら、その直後で、 errorInfo チェックを行って下さい
エラーがなければ、<table>用の文字列を出力していくようにします。
また、最後の閉じタグ</table> がないと、表は全く表示されなくなるブラウザも有りますのでこれも注意して下さい。
まずは、html文法で、どこにどの文字列をはさんでよいのか把握する方が先なのでは?
あと、ごく初歩的ですが、離れたところに記述してるせいで、途中で、$link 変数に別なデータを入れてしまったりなどもあるので、どの変数がどこで使われてるかなどもしっかり把握しておく必要があります。まあ、ちょっとしたタイプミスで意図せずそうなることもあるので、var_dump() でのチェックは有用です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysqlがインストールされている...
-
#1062 - '0' は索引 'PRIMARY' ...
-
データベースの接続に失敗して...
-
[XAMPP Control Panel v3.2.4] ...
-
下記の問合せを行うクエリを、P...
-
テーブル名が可変の場合のクエ...
-
テーブル作成時のカラムについて
-
同一日に複数レコードがある場...
-
MAMP 99ドル約1.6万円 高い...
-
あってますか?SQL
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MYSQLからphpで取り出した...
-
php データ削除
-
PHPからMySQLへの検索
-
PDOでMySQL接続した際の文字化...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
Pro*Cの構文エラー
-
JAVA SQLServerException 列名 ...
-
SQL文が実行できません
-
<VB.NET>INSERT文でDBにデータ...
-
insert1つの処理でもトランザ...
-
アラートでyes noを作りたいです。
-
PHPで[]の使い方について
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
dbに登録したデータをphpのプル...
-
エラー3011
-
ResultSetインターフェイスでの...
-
VBA ACCESS SQL...
-
csvをDBへ読み込んだら、NULLが...
おすすめ情報