| ページ数 |
内容 |
書籍修正刷 |
電子書籍訂正 |
発生刷 |
登録日 |
005
2~4行目 |
| 誤 |
マイナーバージョンは、主にバグ修正版です。一方、メジャーバージョンの番号は、新機能の追加などで大幅に変更された場合に上がります。 |
| 正 |
マイナーバージョンの番号は、主にバグ修正が行われると上がります。一方、メジャーバージョンの番号は、新機能の追加など、大きな仕様変更が行われると上がります。 |
|
2刷 |
済 |
1刷 |
2021.05.26 |
010
「■ メモリの容量」1~2行目 |
| 誤 |
また、並べ替えなどを行うために、さらにメモリ領域が必要となります。 |
| 正 |
また、データの並べ替えなどを行うために、さらにメモリ領域が必要となります。 |
|
2刷 |
済 |
1刷 |
2021.05.26 |
011
「2.2.2 one click installerのダウンロード」3行目
|
| 誤 |
https://www.enterprisedb.com/products/pgdownload.do#windows |
| 正 |
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads |
|
2刷 |
済 |
1刷 |
2021.05.26 |
030
「2.3.3 環境設定」3~19行目 |
| 誤 |
vi などのエディタで~postgres/.bash_profileを編集します。
$ vi ~postgres/.bash_profile
次のように.bash_profileを編集します。
[ -f /etc/profile ] && source /etc/profile
PATH=/usr/pgsql-11/bin:$PATH ―――追加
MANPATH=/usr/pgsql-11/share/man:$MANPATH ―――追加
PGDATA=/var/lib/pgsql/11/data
export PATH MANPATH PGDATA ―――追加
● PATH
PostgreSQL のコマンドを絶対パスで指定せずに実行できるよう、環境変数PATHを設
定します。
● MANPATH
PostgreSQLのコマンドのオンラインマニュアルを参照できるよう、環境変数MANPATH
を設定します。
● PGDATA
データベースクラスタのパスになります。
.bash_profileを編集し終えたら、設定ファイルを再読み込みしてください。
.bash_profileを編集し終えたら、設定ファイルを再読み込みしてください。 |
| 正 |
vi などのエディタで~postgres/.pgsql_profileを作成します。基本的にユーザーの環境変数は.bash_profile で編集しますが、PostgreSQL の本家サイトが公開するYumリポジトリを通してPostgreSQLをインストールする場合に限り、.pgsql_profileを使う必要があります。これは、本家サイトのPostgreSQL はインストールの都度、postgres ユーザーの.bash_profile は自動的に上書きするようになっているからです。
$ vi ~postgres/.pgsql_profile
次のように.pgsql_profileを編集します。
PATH=/usr/pgsql-9.0/bin:$PATH
MANPATH=/usr/pgsql-9.0/share/man:$MANPATH
PGDATA=/var/lib/pgsql/9.0/data
export PATH MANPATH PGDATA
● PATH
PostgreSQL のコマンドを絶対パスで指定せずに実行できるよう、環境変数PATHを設定します。
● MANPATH
PostgreSQLのコマンドのオンラインマニュアルを参照できるよう、環境変数MANPATHを設定します。
● PGDATA
データベースクラスタのパスになります。詳細については、「2.4.1 データベースクラスタの作成」で説明します。
.pgsql_profile を編集し終えたら、.bash_profile を再読み込みしてください。.bash_profile から.pgsql_profileも読み込まれるようになっています。 |
備
考 |
2刷で上記の修正をおこないましたが、内容の一部に誤りがございました。
大変申し訳ありません。
正しくは以下のとおりです。
(2021年7月20日)
■「2.3.3 環境設定」10~13行目
正:
PATH=/usr/pgsql-11/bin:$PATH
MANPATH=/usr/pgsql-11/share/man:$MANPATH
PGDATA=/var/lib/pgsql/11/data
export PATH MANPATH PGDATA |
|
2刷 |
済 |
1刷 |
2021.05.26 |
030
「2.3.3 環境設定」10~13行目 |
| 誤 |
PATH=/usr/pgsql-9.0/bin:$PATH
MANPATH=/usr/pgsql-9.0/share/man:$MANPATH
PGDATA=/var/lib/pgsql/9.0/data
export PATH MANPATH PGDATA |
| 正 |
PATH=/usr/pgsql-11/bin:$PATH
MANPATH=/usr/pgsql-11/share/man:$MANPATH
PGDATA=/var/lib/pgsql/11/data
export PATH MANPATH PGDATA |
|
3刷 |
済 |
2刷 |
2021.07.20 |
037
Column「データベースクラスタのバージョンアップ」のコード説明フキダシ(2箇所) |
|
2刷 |
済 |
1刷 |
2020.02.13 |
048
表3.1の1行目 |
| 誤 |

(画像クリックで拡大) |
| 正 |

(画像クリックで拡大) |
備
考 |
2行目以降と体裁を揃えます。 |
|
2刷 |
済 |
1刷 |
2021.05.26 |
074
3つ目のコマンド |
| 誤 |
$ psql -U testuser testdb |
| 正 |
$ psql testdb testuser |
|
2刷 |
済 |
1刷 |
2020.02.13 |
086
表4.4の「説明」の1行目 |
|
2刷 |
済 |
1刷 |
2021.05.26 |
091
「4.5.4 JOIN」6行目 |
| 誤 |
meibo テーブルのID列と |
| 正 |
meiboテーブルのid列と |
備
考 |
「ID列」を「id列」(小文字)に変更します。 |
|
2刷 |
済 |
1刷 |
2021.05.26 |
161
5行目 |
| 誤 |
そしてこのデータベースで上記のDDLを実行し、3つのテーブルを |
| 正 |
そしてこのデータベースで上記のDDLを実行し、4つのテーブルを |
|
3刷 |
済 |
1刷 |
2023.02.14 |
164
「リスト6.2 Csrf.php」のコード 上から2行目 |
| 誤 |
 (画像クリックで拡大) |
| 正 |
 (画像クリックで拡大) |
備
考 |
この改行により、31行目以降の行数をを繰り下げます。 |
|
3刷 |
済 |
1刷 |
2023.02.14 |
164
「リスト6.2 Csrf.php」のコード 上から2~3行目 |
| 誤 |
 (画像クリックで拡大) |
| 正 |
 (画像クリックで拡大)
|
備
考 |
「31: }」を改行します。 |
|
2刷 |
済 |
1刷 |
2020.07.13 |
169
リスト6.6 29~37行目 |
| 誤 |

(画像クリックで拡大) |
| 正 |

(画像クリックで拡大) |
|
2刷 |
済 |
1刷 |
2021.05.26 |
170
リスト6.6 38~45行目 |
| 誤 |

(画像クリックで拡大) |
| 正 |

(画像クリックで拡大) |
|
2刷 |
済 |
1刷 |
2021.05.26 |
170
本文12~18行目 |
| 誤 |
また、PHP にはバイナリセーフではない関数【3】もあるので、$allow_binaryをtrue にしな
い限りはNULL バイトを許さないようにしています。
mb_check_encoding 関数はdefault_charset に設定した値、さらに内部文字エンコーディ
ングの値をもとにチェックを行います(34 行目)。今回は設定していないのでデフォルトの
UTF-8 がdefault_charsetとして用いられています。このため、mb_check_encoding 関数は指
定された文字列がUTF-8として有効かどうかをチェックします。$allow_binary がtrue でな
い限りUTF-8 以外の文字列も不正としました。 |
| 正 |
$allow_binary が偽のときは、文字列が正当どうかのチェックを行います【※】。今回は不要
な文字列が1つでも見つかった場合には$bad_input_exists にtrue が設定されます。これが
参照渡しになっているので、filter_input 関数が終わった後の上位のスコープでも判定がで
きるという仕組みです。
PHP にはバイナリセーフではない関数【3】もあるので、NULL バイトを許さないようにして
います。mb_check_encoding 関数はdefault_charset に設定した値、または内部文字エンコー
ディングの値をもとにチェックを行います(35 行目)。今回は設定していないのでデフォルト
のUTF-8 がdefault_charsetとして用いられ、UTF-8として正しいかがチェックされます。 |
備
考 |
側注に以下を追加します。
【※】
filter_input 関数の第4引数、キーoptions の値は無名関数です。この無名関数は、渡されたデータがスカラーの場合には1度だけ、配列の場合には要素数の回数分呼び出されます。変数を上位のスコープから引き継ぐことができ、その場合はuseで渡します。 |
|
2刷 |
済 |
1刷 |
2021.05.26 |
181
「6.2.3 ログイン処理」の「リスト6.13 signup.html(変更後)」とその上の文章。 |
| 誤 |
 (画像クリックで拡大) |
| 正 |
 (画像クリックで拡大) |
|
3刷 |
済 |
1刷 |
2023.02.14 |
185
ページ中央 本文5行目 |
| 誤 |
次に、先ほど作成したスクリプトファイルの Login.php を修正します(リスト 6.17)。 |
| 正 |
次に、スクリプトファイル login.php を作成します(リスト 6.17)。 |
|
3刷 |
済 |
1刷 |
2021.12.15 |
185
「リスト 6.17」の表題 |
| 誤 |
リスト 6.17 Login.php(修正後) |
| 正 |
リスト 6.17 login.php |
|
3刷 |
済 |
1刷 |
2021.12.15 |
187
本文1行目 |
| 誤 |
|
| 正 |
login.phpは以下の場所に保存します。
C:¥mytest¥simplesns¥public_html¥login.php |
備
考 |
上記文章を「リスト 6.17」の直後に挿入します。 |
|
3刷 |
済 |
1刷 |
2021.12.15 |
194
リスト6.19 |
| 誤 |
23: <a href="post.php?post_id=<?= h($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a> |
| 正 |
23: <a href="post.php?post_id=<?= rawurlencode($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a> |
|
3刷 |
済 |
1刷 |
2023.02.14 |
200
リスト6.22 |
| 誤 |
9: <a href="post.php?post_id=<?= h($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a>
10: <div class="created-at"><?= h((new DateTime($post['created_at']))->format('Y-m-d H:i')) ?></div>
11: <?php endforeach; ?>
12: </table> |
| 正 |
9: <a href="post.php?post_id=<?= rawurlencode($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a>
10: <div class="created-at"><?= h((new DateTime($post['created_at']))->format('Y-m-d H:i')) ?></div>
11: <?php endforeach; ?>
12: </dl> |
|
3刷 |
済 |
1刷 |
2023.02.14 |
209
リスト6.28 |
| 誤 |
37: <dt><a href="user.php?user_name=<?= h($post['user_name']) ?>"><?= h($post['user_name']) ?>
38: <dd>
39: <a href="post.php?post_id=<?= h($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a> |
| 正 |
37: <dt><a href="user.php?user_name=<?= rawurlencode($post['user_name']) ?>"><?=h($post['user_name']) ?></a>
38: <dd>
39: <a href="post.php?post_id=<?= rawurlencode($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a> |
|
3刷 |
済 |
1刷 |
2023.02.14 |
217
リスト6.31 |
| 誤 |
5: <dt><a href="/user.php?user_name=<?= h($post['user_name']) ?>"><?= h($post['user_name']) ?></a></dt>
6: <dd><?= nl2br(h($post['post']), false) ?></dd>
7: <dd><?= h((new DateTime($post['created_at']))->format('Y-m-d H:i')) ?></dd>
18: <dt><a href="/user.php?user_name=<?= h($login->user('user_name')) ?>"><?= h($login->user('user_name')) ?></a></dt> |
| 正 |
5: <dt><a href="/user.php?user_name=<?= rawurlencode($post['user_name']) ?>"><?= h($post['user_name']) ?></a>
6: <dd><?= nl2br(h($post['post']), false) ?></dd>
7: <dd class="created-at"><?= h((new DateTime($post['created_at']))->format('Ym-d H:i')) ?>
18: <dt><a href="/user.php?user_name=<?= rawurlencode($login->user('user_name'))?>"><?= h($login->user('user_name')) ?></a> |
|
3刷 |
済 |
1刷 |
2023.02.14 |
218
リスト6.31 |
| 誤 |
40: <a href="user.php?user_name=<?= h($comment['user_name']) ?>"><?= h($comment['user_name']) ?></a>
41: <?php endif; ?>
42: <dd><a href="comment.php?comment_id=<?= h($comment['comment_id']) ?>"><?= nl2br(h($comment['comment']), false) ?></a>
43: <dd><?= h((new DateTime($comment['created_at']))->format('Y-m-d H:i')) ?></dd> |
| 正 |
40: <a href="user.php?user_name=<?= rawurlencode($comment['user_name']) ?>"><?= h($comment['user_name']) ?></a>
41: <?php endif; ?>
42: <dd><a href="comment.php?comment_id=<?= rawurlencode($comment['comment_id'])?>"><?= nl2br(h($comment['comment']), false) ?></a>
43: <dd class="created-at"><?= h((new DateTime($comment['created_at']))->format('
Y-m-d H:i')) ?> |
|
3刷 |
済 |
1刷 |
2023.02.14 |
227
リスト6.35 |
| 誤 |
6: <a href="user.php?user_name=<?= h($comment['post_user_name']) ?>"><?= h($comment['post_user_name']) ?></a>
8: <a href="post.php?post_id=<?= h($comment['post_id']) ?>"><?= nl2br(h($comment['post']), false) ?></a>
14: <a href="/user.php?user_name=<?= h($comment['user_name']) ?>"><?= h($comment['user_name']) ?></a></dt>
20: <dt><a href="/user.php?user_name=<?= h($login->user('user_name')) ?>"><?= h($login->user('user_name')) ?></a></dt> |
| 正 |
6: <a href="user.php?user_name=<?= rawurlencode($comment['post_user_name']) ?>"><?= h($comment['post_user_name']) ?></a>
8: <a href="post.php?post_id=<?= rawurlencode($comment['post_id']) ?>"><?= nl2br(h($comment['post']), false) ?></a>
14: <a href="/user.php?user_name=<?= rawurlencode($comment['user_name']) ?>"><?= h($comment['user_name']) ?></a>
20: <dt><a href="/user.php?user_name=<?= rawurlencode($login->user('user_name'))?>"><?= h($login->user('user_name')) ?></a> |
|
3刷 |
済 |
1刷 |
2023.02.14 |
228
リスト6.35 |
| 誤 |
 (画像クリックで拡大) |
| 正 |
 (画像クリックで拡大) |
|
3刷 |
済 |
1刷 |
2023.02.14 |
237
リスト6.38 |
| 誤 |
6: <a href="user.php?user_name=<?= h($comment['post_user_name']) ?>"><?= h($comment['post_user_name']) ?></a>
7: <dd>
8: <a href="post.php?post_id=<?= h($comment['post_id']) ?>"><?= nl2br(h($comment['post']), false) ?></a> |
| 正 |
6: <a href="user.php?user_name=<?= rawurlencode($comment['post_user_name']) ?>"><?= h($comment['post_user_name']) ?></a>
7: <dd>
8: <a href="post.php?post_id=<?= rawurlencode($comment['post_id']) ?>"><?= nl2br(h($comment['post']), false) ?></a> |
|
3刷 |
済 |
1刷 |
2023.02.14 |
238
リスト6.38 |
| 誤 |
17: <a href="user.php?user_name=<?= h($parent_comment['user_name']) ?>"><?= h($parent_comment['user_name']) ?></a> |
| 正 |
17: <a href="user.php?user_name=<?= rawurlencode($parent_comment['user_name'])?>"><?= h($parent_comment['user_name']) ?></a> |
|
3刷 |
済 |
1刷 |
2023.02.14 |
280
1番上コード例 |
| 誤 |
template1=# SELECT rolname, rolpassword FROM pg_authid WHERE rolname = 'user1';
rolname | rolpassword
---------+-------------------------------------
user1 | md57d1b5a4329b6478e976508ab9a49ee3d
改めてパスワードを設定します。 |
| 正 |
template1=# SELECT rolname, rolpassword FROM pg_authid WHERE rolname = 'user1';
rolname | rolpassword
---------+-------------------------------------
user1 | md57d1b5a4329b6478e976508ab9a49ee3d
template1=> SET password_encryption TO 'scram-sha-256';
改めてパスワードを設定します。 |
|
2刷 |
済 |
1刷 |
2020.02.13 |