😸

PHPからMySQLを操作する

2022/09/26に公開

こんにちは、nekoです!

PHPからMySQLを操作する方法を学習しました。知識の整理と定着のため学習内容のまとめをしていきたいと思います。

MySQLに接続する

mysqli_connect('ホスト名', 'ユーザー名', 'パスワード', 'データベース名');

// 読書ログでMySQLに接続するなら
mysqli_connect('db', 'book_log', 'pass', 'book_log');

接続されなかったときの対策

もしデータベースに接続されていないまま処理が実行されることを防ぐために対策をしておきます。

/* 
 * MySQLに接続する。
 * 接続に失敗してFALSEが帰ってきた場合は、それを$linkに代入する
 */
$link = mysqli_connect('db', 'book_log', 'pass', 'book_log');

/*
 * $linkにFALSEが入っていたらTRUE
 */
if (!$link) {
	echo 'Error: データベースに接続できません' . PHP_EOL;
	echo 'Debugging error: ' . mysqli_connect_error() . PHP_EOL;
	exit;
}
  • mysqli_connect():接続に失敗した場合にFALSEを返します。
  • !:真偽値を反転させます。
  • mysqli_connect_error():エラー情報が表示されます。

MySQLとの接続を切断する

mysqli_close($link)
  • $link:mysqli_connect()が返すID

データを登録する

INSERT

MySQLにデータを登録するにはINSERT文を使います。

INSERT INTO <テーブル名> (1,2, ...) VALUES (1,2, ...);

きちんと登録ができたかどうかは後述するSELECT文を使って確認をすることができます。

PHPからMySQLにデータを登録する

mysqli_query($link, $query)
  • INSERT文を使うとテーブルに1行のデータを挿入することができます。
  • $link:mysqli_connect()が返すリンクID
  • $query:SQL文の文字列

使い方

$link = mysqli_connect('db', 'book_log', 'pass', 'book_log');
$sql = "INSERT INTO companies (name) VALUES ('SmartHR inc')";
mysqli_query($link, $sql);

エラーへの対策

エラーが発生した場合の対策も記述しておきます。

$link = mysqli_connect('db', 'book_log', 'pass', 'book_log');
$sql = "INSERT INTO companies (name) VALUES ('SmartHR inc')";
$result = mysqli_query($link, $sql);

if ($result) {
	echo 'データを追加しました' . PHP_EOL:
} else {
	echo 'Error: データの追加に失敗しました' . PHP_EOL;
	echo 'Debugging Error: ' .mysqli_error($link) . PHP_EOL;
}

複数行にまたがる文字を表記するときは

ヒアドキュメントを使うと見やすくなります。

$sql = <<<EOT              # <<<ID
INSERT INTO companies (
	name
) VALUES (
	'SmartHR inc'
)
EOT;                       # ID ※インデントしてはいけない

$link = mysqli_connect('db', 'book_log', 'pass', 'book_log');
mysqli_query($link, $sql);

データを取得する

SELECT

データを取得するにはSELECT文を使います。

SELECT <列名>, ...
	FROM <テーブル名>;

SELECT name, founder
	FROM companies;

PHPからMySQLのデータを取得する

$link = mysqli_connect('db', 'book_log', 'pass', 'book_log');  // DBに接続する
$sql = 'SELECT name, founder FROM companies';
$results = mysqli_query($link, $sql);  // SQL文を実行

while ($company = mysqli_fetch_assoc($results)) {
	echo '会社名:' . $company['name'] . PHP_EOL;
	echo '代表者:' . $company['founder'] . PHP_EOL;
}

mysqli_free_result($results);  // メモリを開放する

mysqli_query

データベース上でクエリを実行します。成功したらmysqli_resultオブジェクトを返します。

mysqli_query($link, $query)

mysqli_fetch_assoc

結果の行を連想配列で取得します。$resultmyqli_resultオブジェクトです。

mysqli_fetch_assoc($result)

mysqli_free_result

結果に関連付けられたメモリを開放します。$resultmyqli_resultオブジェクトです。

mysqli_free_result($result)

Discussion