プログラミング本気1週間 4日目
前回の記事
本日の成果
・昨日からやっている掲示板の作成を理解しながらやっていました。
・ようやくデータベースから投稿を引っ張り出し、表示させてくれるようになりました。
今日の感想
エラーをだんだん自分で対処できるようになってきた一方で、ある1つのエラーに長時間使ってしまって、かなり悔しくなりました。
基本的に今までは
- エラーをコピペしてググる
- エラーを翻訳して理解した後にググる
などという手法でやってきましたが、本日のエラーを通して学んだことは
まずは、エラー文の行の関数を公式で調べてみるということでした。
公式でみてみると、自分のバージョンでは対応していなかったり、ちょっと文字が違ったりするのを確認できるということでした。
この事を忘れないようにしようと思います。
今日わかった事 自分用
ENT_QUOTES
"とか' をhtmlエンティティに変換する
preg_replaceについて
置換ができるらしい。
掲示板を作る際に、書き込みに対するクライアントの改行を削除して<br>要素に変えるという荒技
rnと書かれているところでは改行コードを探しています。そしてそのあとに書かれている「,」後の文字に置き換わる
もちろん他の使い方もある。
<br>の例・・・・・・・・・
preg_replace( '/\\r\\n|\\n|\\r/', '<br>', $clean['置換したい関数名']);
データベースのAUTO_INCREMENTのせいでひどい目にあった話
MySQLを使う際に、AUTO_INCREMENTを設定していないと酷い目に会うことがわかった。
今回の例
Duplicate entry '0' for key 'PRIMARY'
というエラーがいくらソースコードを修正しても存在し続けて困った。
2時間ほどコードと苦闘していたが、ググりまくってみたらAUTO_INCREMENTを登録していなかった事が原因らしかった。
もっと早くエラーを理解できていれば…。もの凄く時間の無駄遣いになってしまったが、MENTAの方もそういうエラーを1人で解決していくことの方が勉強になると言っていたので、よしとしよう…。
この後も別のエラーにさいなまれているのだが…
fetchall()の呪い
お恥ずかしい話なのですが、このエラーで僕はGoogleと3時間は対話したと思う。
半分泣きながら、必死で試行錯誤してみたものの(他のやり方など)全く解決せず…。
正直質問力がない今terateilでうまく質問できる勇気も出ず、MENTAのかたに質問を投げかけたところ。
追記:MENTAさんが解決してくださいました。。。(なんとか理解できました泣)
このエラーに3時間くらいかけてしまった事を伝えると、励ましてくださいました。本当にMENTAは最高のサービスですね泣
現在の問題
データベースから掲示板に映し出す投稿を引っ張り出してくる作業において、fetch all()で配列式に取り出してもらい、htmlのところに出力すると言った事をやろうとしている。
/ / データベースに接続
$mysqli = new PDO('mysql:host=localhost;dbname=board;charset=UTF8;', root, パスワード);
// 接続エラーの確認
if( $mysqli->connect_errno ) {
$error_message[] = 'データの読み込みに失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error;} else {
//データベースから取り出す
$sql =
"SELECT view_name,message,post_date
FROM message
ORDER BY post_date DESC";
//SQL文をデータベースへ送信するためにqueryメソッドをかます
$res = $mysqli->query($sql);
//$resがしっかりと入っていれば$message_arrayに配列で入れてくれるはずだった…
if( $res ) { $message_array = $res->fetch_all(); }
//終了
$mysqli->close();}
こちらを参考にする。
https://www.php.net/manual/ja/mysqli-result.fetch-all.php