XAMPPでPHPを使ってMySQLにアクセスする 2

本記事は、「XAMPPでPHPを使ってMySQLにアクセスする」の続きです。先にそちらを見ていただくことをお勧めします。

目標

本記事の目標は、XAMPPで、PHPを使ってMariaDB(MySQL)にアクセスし、データを書きこむことです。(前回は、データの読み出しを行いました。)

環境

Windows10
XAMPP 7.4.10

方法

1. PDOでデータベースにアクセスします

まず、「XAMPPでPHPを使ってMySQLにアクセスする」で作成したgetuser.phpを開きます。コードはここに追加していきます。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Users</title>
</head>
<body>
	<?php
	$dsn = 'mysql:host=localhost;dbname=photo_sharing';
	$username = 'root';
	$password = '********';

	try {
    	$dbh = new PDO($dsn, $username, $password);
    	echo "<p>Succeed!</p>";

    	$sql = 'select * from user';
		$sth = $dbh->prepare($sql);
		$sth->execute();
		$result = $sth->fetchAll();

		foreach ($result as $row) {
        echo $row['id']." ";
        echo $row['name']." ";
        echo $row['age']." ";
        echo "<br />";
    	}
	} catch (PDOException $e) {
    	echo  "<p>Failed : " . $e->getMessage()."</p>";
    	exit();
	}
	?>
</body>
</html>

2. データ入力のためのフォームを作成します

	
	<php?
		//omitted
	?>
	<br/>
	<div>Register new user</div>
	<form action="" method="POST">
		<div><label>name :</label><input type="text" name="name"/></div>
		<div><label>age :</label><input type="text" name="age"/></div>
		<input type="submit" value="ADD" />
	</form>
</body>

3. SQL文を作成します

‘insert’文を作成します。値を直接渡すか、:name :ageのようにパラメータを使用することもできます。その後、PDO::prepare()を実行します。

$sql = 'insert into user (id, name, age) values (NULL, :name, :age)';
$sql->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$sql->bindValue(':age', $_POST['age'], PDO::PARAM_INT);
$sth = $dbh->prepare($sql);

4. SQLを実行します

$sth->execute();

getuser.php

POST後に、POSTしたデータを$_POSTで取得して表示する処理を追加しました。以下が、最終的なgetuser.phpになります。POSTについて、詳しくは、”How to use posted data in the same page“を参照してください。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Users</title>
</head>
<body>
	<?php
	$dsn = 'mysql:host=localhost;dbname=photo_sharing';
	$username = 'root';
	$password = '********';

	try {
    	$dbh = new PDO($dsn, $username, $password);
    	echo "<p>Succeed!</p>";

    	$sql = 'select * from user';
		$sth = $dbh->prepare($sql);
		$sth->execute();
		$result = $sth->fetchAll();

		foreach ($result as $row) {
        echo $row['id']." ";
        echo $row['name']." ";
        echo $row['age']." ";
        echo "<br />";
    	}
	} catch (PDOException $e) {
    	echo  "<p>Failed : " . $e->getMessage()."</p>";
    	exit();
	}
	if ($_POST) {
    	echo "<br />ADD data ".$_POST['name']." ".$_POST['age'];
    	$sql = "insert into user (id, name, age) values (NULL, '".$_POST['name']."', ".$_POST['age'].")";
		$sth = $dbh->prepare($sql);
		$sth->execute();
    }
	?>
	<br />
	<div>Register new user</div>
	<form action="" method="POST">
		<div><label>name :</label><input type="text" name="name"/></div>
		<div><label>age :</label><input type="text" name="age"/></div>
		<input type="submit" value="ADD" />
	</form>
</body>
</html>

結果

localhost/testdb/getuser.phpにアクセスして、データを入力します。

送信後、メッセージが表示されます。

ページをリロードすると追加されたデータも表示されるようになります。
* 自分の環境では、IDはインクリメントしながら自動的に設定されるようになっています。