前提・実現したいこと
PHP7.4.16+PostgreSQL10.13でwebシステムの勉強中です。
PDOでDBへアクセスしてデータを取得→ブラウザにテーブル表示するところまでは問題なかったのですが、取得した値にnullが含まれているとそれ以後のデータを表示することができません。
該当のソースコード
SQL
1create table test( 2 id int not null, 3 text1 text, 4 text2 text, 5 text3 text, 6 constraint pk_test primary key(id) 7); 8 9insert into test values(1, 'hoge1', 'fuga1', 'aaa'); 10insert into test values(2, 'hoge2', 'fuga2', 'bbb'); 11insert into test values(3, 'hoge3', 'fuga3', 'ccc'); 12insert into test values(4, 'hoge4', 'fuga4', 'ddd'); 13insert into test values(5, 'hoge5', 'fuga5', 'eee');
PHP
1<?php 2require_once 'connectDatabase.php'; 3?> 4<html> 5 6<head> 7 <meta http-equiv="content-type" charset="utf-8"> 8</head> 9 <dl> 10 <div style="display:inline-flex"> 11 </div> 12 </dl> 13 <table border="1"> 14 <tr> 15 <th style="width:100px">id</th> 16 <th style="width:300px">text1</th> 17 <th style="width:300px">text2</th> 18 <th style="width:300px">text3</th><br> 19 </tr> 20 <?php 21 try { 22 $db = connectDB(); // 外部クラスでDBへ接続 23 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 24 $stt = $db->query("select id, text1, text2, text3 from test order by id desc"); 25 while ($row = $stt->fetch(PDO::FETCH_ASSOC)) { 26 ?> 27 <tr> 28 <td><?= e($row['id']) ?></td> 29 <td><?= e($row['text1']) ?></td> 30 <td><?= e($row['text2']) ?></td> 31 <td><?= e($row['text3']) ?></td> 32 </tr> 33 <?php 34 } 35 } catch (PDOException $e) { 36 print "Error: {$e->getMessage()}"; 37 } 38 ?> 39 </table> 40 </form> 41 42</html>
update test set text1=null where id=5;実行後
2枚目キャプチャ出力時のソース
<html> <head> <meta http-equiv="content-type" charset="utf-8"> </head> <dl> <div style="display:inline-flex"> </div> </dl> <table border="1"> <tr> <th style="width:100px">id</th> <th style="width:300px">text1</th> <th style="width:300px">text2</th> <th style="width:300px">text3</th><br> </tr> <tr> <td>5</td> <td>
出力箇所で利用しているeの内容
<?php function e(string $str, string $charset = 'UTF-8'): string{ return htmlspecialchars($str, ENT_QUOTES | ENT_HTML5, $charset); }
var_dump($row)を加筆しました
<?= var_dump($row) ?> <tr> <td><?= e($row['id']) ?></td> <td><?= e($row['text1']) ?></td> <td><?= e($row['text2']) ?></td> <td><?= e($row['text3']) ?></td>
試したこと
select分で列名指定する箇所をcoalesce(text1, '')にしても変化は無かったので、nullだけでなく空文字の場合に特別な処理が必要であろうことは分かりました。該当する情報が無いか検索したのですが、テーブル全列にデータがある前提のものしか見つけることができませんでした。
直面している事象以外にも修正点がありましたらご指摘頂けると幸いです。
宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー