PHPでMySQL連携ができたので、忘れないようにメモを残します。
MySQLの設定
MySQLに以下のような設定をしました。なおログインユーザはroot
で、パスワードはpassword
にしています。
MySQLのデータベース
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| shop |
| sys |
+--------------------+
shopデータベース内のテーブル
+----------------+
| Tables_in_shop |
+----------------+
| member |
+----------------+
memberテーブル内のデータ
+--------+------+
| name | age |
+--------+------+
| satou | 29 |
| tanaka | 35 |
| ueda | 25 |
| yamada | 40 |
+--------+------+
PHPファイル
下のshop.php
ファイルを/var/www/html/
配下に置きます。
shop.php
<html>
<head>
</head>
<body>
member list<br>
<?php
$dsn = 'mysql:host=localhost;dbname=shop;charset=utf8';
$user = 'root';
$password = 'password';
try {
$pdo = new PDO($dsn,$user,$password);
} catch(PDOException $e) {
exit('Database error. ('.$e->getMessage().')');
}
$sql = 'select name,age from member where name like :name';
$stmt = $pdo->prepare($sql);
$name = '%'.$_GET['name'].'%';
$stmt->bindParam(':name',$name,PDO::PARAM_STR);
$stmt->execute();
$all = $stmt->fetchAll();
foreach($all as $row){
print htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8').'('.$row['age'].")<br>\n";
}
?>
</body>
</html>
これはmemberテーブル内のnameを検索し出力するプログラムです。
※SQLインジェクション対策としてbindParamを使い、クロスサイトスクリプティング(XSS)対策としてhtmlspecialcharsを使用しています。
動作確認
Firefoxでlocalhost\shop.php?name=da
と入力します。(da
を含む名前を持つデータのみ出力します)
予定通り、uedaとyamadaが出力されました。