2022-07

PHP

【PHP】PHPの文字化け対処法:mb_convert_encodingの使い方

こんにちは、かつコーチです。前回は「ファイルが見つかりません」エラーの原因と対処法を扱いました。今回は、日本語を扱うPHP開発でほぼ全員がぶつかる「文字化け」について解説します。画面に「縺薙s縺ォ縺。縺ッ」のような意味不明な文字列が表示され...
PHP

【PHP】「ファイルが見つかりません」エラーの原因と対処法

こんにちは、かつコーチです。前回はNotice・Warning・Fatal Errorといった、エラーの「レベル」の違いを解説しました。今回はその中でも初心者が本当によく遭遇する、次のようなエラーを深掘りします。Warning: requi...
PHP

【PHP】PHPのNotice・Warning・Fatal Errorの違いと読み方

こんにちは、かつコーチです。前回まで、素のPHPでデータベースに接続する方法を扱ってきました。mysqliやPDOでコードを書いていると、赤い文字や見慣れない英語の羅列が画面にドバッと表示されて、心が折れそうになった人も多いのではないでしょ...
PHP

【PHP】PHPでのDB接続、なぜこれが大変なのか

こんにちは、かつコーチです。前回の記事で、PHPだけを使って登録・一覧・更新・削除のCRUD処理を一通り実装しました。たった1つのusersテーブルを操作するだけなのに、db.php・insert.php・list.php・update.p...
PHP

【PHP】PHPだけでCRUD処理を実装してみる(登録・一覧・更新・削除)

こんにちは、かつコーチです。ここまでの3回で、PDOでのMySQL接続・データ取得・プリペアドステートメントによる安全なSQLの書き方を学んできました。今回はそれらを組み合わせて、Webアプリの基本であるCRUD処理を、PHPだけで一通り実...
PHP

【PHP】プリペアドステートメントでSQLインジェクションを防ぐ方法

こんにちは、かつコーチです。前回まで、固定のSQL文をPDOで実行してデータを取得する方法を見てきました。ですが実際のアプリでは、フォームから送られてきたユーザーの入力値をSQLに組み込む場面がほとんどです。このとき書き方を間違えると、SQ...
PHP

【PHP】PDOでSQLを実行してデータを取得する方法

こんにちは、かつコーチです。前回の記事で、PDOを使ってMySQLに接続できるようになりました。接続できただけではまだ何もできないので、今回は実際にSQL文を実行して、sample_dbのusersテーブルからデータを取り出してみましょう。...
PHP

【PHP】PHPからMySQLに接続する:PDOの基本

こんにちは、かつコーチです。前回まででトレイトを扱い、PHPのオブジェクト指向まわりは一通り触れてきました。今回からは新しいテーマ、「データベース」に入っていきます。PHPだけでどれだけ動的なページを作れても、会員情報や投稿内容を保存する場...
PHP

【PHP】PHPのトレイト(trait)で複数クラスに機能を共有する方法

こんにちは、かつコーチです。前回は静的メソッド・静的プロパティ(static)について解説しました。今回でオブジェクト指向シリーズはひと区切りです。最後に扱うのは「trait(トレイト)」という、Laravelを学ぶ上でも避けて通れない仕組...
PHP

【PHP】PHPの静的メソッド・静的プロパティ(static)とは

こんにちは、かつコーチです。前回はアクセス修飾子(public / protected / private)について解説しました。今回は、オブジェクト指向でよく登場するもう1つのキーワード「static」を扱います。Laravelのコードを...
PHP

【PHP】PHPのアクセス修飾子(public/protected/private)の使い分け

こんにちは、かつコーチです。前回は継承とインターフェースについて解説しました。ここまでの記事のコード例では、プロパティやメソッドにさりげなく public というキーワードを付けてきました。今回は、この public を含めたアクセス修飾子...
PHP

【PHP】PHPの継承・インターフェースをわかりやすく解説

こんにちは、かつコーチです。前回はクラスとインスタンスの基本を扱いました。「クラスは設計図、インスタンスはその実体」という考え方には慣れてきたでしょうか。今回は、クラスをさらに便利に使うための「継承」と「インターフェース」を解説します。似た...
PHP

【PHP】PHPのオブジェクト指向入門:クラスとインスタンスの基本

こんにちは、かつコーチです。久しぶりにPHPの話題を取り上げます。前回は名前空間(namespace)とautoloadの基本を扱いました。今回からいよいよ「オブジェクト指向」に入っていきます。PHPを勉強していると、必ずどこかで「クラス」...
MySQL

【MySQL】EXPLAINでMySQLの実行計画を読む

こんにちは、かつコーチです。前回はインデックスの種類を整理しましたが、「インデックスを張ったのに速くならない」という相談は実務でも頻繁に起こります。原因を切り分けるには、MySQLが実際にどうクエリを実行しているかを可視化するEXPLAIN...
MySQL

【MySQL】MySQLのインデックスの種類(B-Tree・フルテキスト・空間インデックス)

こんにちは、かつコーチです。SQL基礎編では「インデックスを張ると検索が速くなる」というところまでお話ししました。ただ、MySQLには用途に応じて何種類かのインデックスが用意されていて、それぞれ得意な検索が違います。今回は「インデックス・パ...
MySQL

【MySQL】JSON型の使い方:半構造化データをMySQLで扱う

こんにちは、かつコーチです。前回はENUM・SET・TEXT系といったMySQL固有のデータ型を解説しました。今回はMySQL 5.7から導入されたJSON型を使って、半構造化データを扱う方法を解説します。JSON型とは?半構造化データを直...
MySQL

【MySQL】MySQL固有のデータ型(ENUM・SET・TEXT系の使い分け)

こんにちは、かつコーチです。アーキテクチャ編では、ストレージエンジンや文字コードの仕組みを解説しました。ここからはデータ型編として、MySQL固有のデータ型に絞って解説します。INT・VARCHARといった基本的な型はSQL基礎編で扱い済み...
MySQL

【MySQL】文字コード・照合順序(utf8mb4)でハマらないために

こんにちは、かつコーチです。前回はMySQLのアーキテクチャ全体像を解説しました。今回は、実務でつまずく人が非常に多い「文字コード」と「照合順序」の話です。絵文字が保存できない、日本語が「?」になる、といったトラブルの多くはここが原因です。...
MySQL

【MySQL】MySQLのアーキテクチャ全体像(サーバーレイヤーとストレージエンジンレイヤー)

こんにちは、かつコーチです。前回はInnoDBとMyISAMというストレージエンジンの違いを扱いました。この記事は上級者向けとして、ストレージエンジンがMySQL全体のどこに位置づけられているのか、アーキテクチャ全体像から解説します。トラン...
MySQL

【MySQL】InnoDBとMyISAMの違い:どちらのストレージエンジンを選ぶか

こんにちは、かつコーチです。入門編ではMySQLのインストールとGUIツールの使い方を解説しました。ここからはアーキテクチャ編として、MySQLの内部の仕組みに踏み込んでいきます。第1回は、MySQLの心臓部とも言えるストレージエンジン、特...