XAMPPのPHPからMariaDB(MySQL)を操作する

この記事は、「[【連載】初めてのWindows用Laravel 5.7開発環境構築入門](https://qiita.com/hitotch/items/a646972fe1992611e92b)」の孫記事です。環境などの条件は、親記事をご覧ください。
この記事は、「[XAMPPでPHP＋MariaDB(MySQL互換)環境を構築する 2018年12月版](https://qiita.com/hitotch/items/0e1751ef38f83a9f3bf4)」の子記事です。
XAMPPではMariaDBがMySQLと表示されているため、記事タイトルでは併記しています。

---
　今回はXAMPP上で動作するPHPのプログラムからMariaDBを操作するところまで進めます。

　テストアプリでは、mycatsというテーブルを作り、その中に登録した猫の名前をWebサイトの画面に表示することにします。

# MariaDBにデータベースを追加する

HeidiSQLを開いて、localhostに接続します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/97708699-fe41-8277-98e3-1ab5d5f2e19e.png)

Localhostを右クリックし、新規作成→データベースを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/62cad27a-5de0-da23-5f07-d156c3bfac1c.png)

今回はテスト用データベースの名前をphptestにします。
名前にphptestと入力し、照合（文字エンコーディング）にutf8mb4_unicode_ciを選択します。utf8mb4_unicode_ciは日本語だけでなく多言語を取り扱うために利用されるもので、Laravel 5.7のデフォルトエンコーディングです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/526d5974-fc0f-fe4b-d01e-5a574b15d027.png)

最後にOKでデータベースが作成されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/5b380449-59d5-f095-1078-37b6b660e8f1.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/1545c9a0-e869-0a9e-3c47-e4289671322c.png)

# テーブルを追加する

phptestデータベースを開いた状態で、右ペインの空白部分を右クリックし、新規作成→テーブルと進みます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/9aafdad4-5e2a-4fe5-3f60-bb4d2578257e.png)

今回作成したいテーブル名「mycats」を入れて、次にカラムを追加するために追加ボタンを押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/8e36542d-d90f-eb1c-bd5a-50cd87f1d007.png)

最初のカラムはIDにします。IDはプライマリキーにします。
追加されたカラムの名前をidとして、NULLを許可のチェックを外します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/862115d6-1497-572c-26ad-e973a247f495.png)

idカラムをプライマリキーにするため、idカラムを右クリックし、新しいインデックスの作成→PRIMARYと進みます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/d9d27286-1c2c-0752-17d4-ec096600c033.png)

これにより、インデックスタブ内に、PRIMARY KEYとしてidが登録されます。
また、idカラムの一番左にはプライマリキーアイコンが付きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/fd26655f-938f-feed-ce7e-e919ced175dd.png)

次に猫の名前を入れるnameカラムを作成します。追加ボタンを押し、カラムの名前をnameとし、データ型にVARCHARを選択して、デフォルト値を「Unknown」とします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/501c8d38-fec4-0cc2-beb5-33f8e592c570.png)

できたら保存します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/69293451-7337-c9cc-e360-ea636f44b310.png)

これでphptestデータベースにmycatsテーブルが作成されました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/b91be9b9-2531-3253-bf5b-98c4e07c0f67.png)

# テーブルに猫を登録する

作ったテーブルmycatsを選択し、データタブを開いて、「テーブルに行を挿入」ボタン（＋ボタン）を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/90a0ecbf-14ca-5469-5502-e7c99a3c291f.png)

最初の猫の情報として、idに1、nameにDidiと入れます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/890c3ca0-cef4-8c93-64fe-0f6b2a00daa3.png)

最後にポストボタン（✓ボタン）を押して確定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/bdcc0754-f26c-cd6b-0faa-6c5073968902.png)

同様に、2匹めの猫の情報としてidに2、nameにFediと入れます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/6844d6e7-5f9f-27ac-80c2-6245806fc9e9.png)

終わったら、HeidiSQLは閉じてOKです。

# PHP側でMariaDBの猫テーブルを読むコードを作成する

Visual Studio Codeでinfo.phpを開きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/0861d428-6fe0-7eec-5f83-7849cd006eac.png)

以下のように書き換えます。

```info.php
<?php 
echo "Hello world";
$test = 123;
echo "$test points get!";

$mysqli = new mysqli('localhost', 'phpuser', 'php', 'phptest');
if($mysqli->connect_error){
    echo $mysqli->connect_error;
    exit();
} else {
    $mysqli->set_charset("utf8mb4");
}

$sql = "SELECT id, name FROM mycats";
if ($result = $mysqli->query($sql)){
    while ($row = $result->fetch_assoc()){
        echo $row["id"] . " : " . $row["name"] . "<br>";
    }
    $result->close();
}
$mysqli->close();

phpinfo();
```

ポイントだけ見ていきます。

```php
$mysqli = new mysqli('localhost', 'phpuser', 'php', 'phptest');
```

ここではMariaDBに接続しています。
第1パラメーターはローカルホストのMariaDBに接続することを指定しています。
第2パラメータと第3パラメータは、MariaDBにアクセスするユーザーIDとパスワードです。
第4パラメータは接続先データベース名なので、猫テーブルを設置したphptestを指定しています。

```php
    $mysqli->set_charset("utf8mb4");
```

接続が成功したら、文字エンコードをutf8mb4にするよう指定しています。これをやらないとうまく通信できないことがあります。

```php
$sql = "SELECT id, name FROM mycats";
```

猫を読み出すSELECT文を書いて、あとは実行して、取得できたレコードすべてを画面に表示しています。

結果は以下のように表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/315589/95cfa23d-6205-58b7-ea24-d9313e19f264.png)

改行などを気にせず出したので1匹目が前の行の続きになってしまっていますが、まあOKとしましょう。笑
とにかく、PHPからMariaDBにアクセスして動作するプログラムを実行することができました。