PHPでMySQLのデータ操作その2
PHPでMySQLを操作する方法を備忘録も兼ねてまとめました。
今回は検索編。
前回から引き続きまずこのようなデータがあるとします。
id | name | age | position |
---|---|---|---|
選手id | 選手名 | 選手の年齢 | 選手のポジション |
.sql
-- futsal_teamというデータベース(がなければ)作成。IF NOT EXISTSで判断。
CREATE DATABASE IF NOT EXISTS futsal_team DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- GRANT文で権限をユーザーに付与、ユーザーはfutsal_team内の全てのテーブルを操作できる。
GRANT ALL PRIVILEGES ON *.* TO 'bs_user'@'localhost' IDENTIFIED BY 'futsal_team';
FLUSH PRIVILEGES;
-- データベースfutsal_team使用。
USE futsal_team;
.sql
-- テーブル作成後、カラム設定。
CREATE TABLE futsal_a (
id integer AUTO_INCREMENT NOT NULL,
name varchar(255) NOT NULL,
age integer NOT NULL,
position varchar(255) NOT NULL,
PRIMARY KEY (id)
);
.sql
-- カラムにそれぞれ値を入れてレコードを作成。idはシーケンス番号がauto_incrementオプションの効果で自動で追加される。
INSERT INTO futsal_a VALUES (null, '加藤A太郎', 25, 'ピヴォ');
INSERT INTO futsal_a VALUES (null, '佐藤B次郎', 27, 'アラ');
INSERT INTO futsal_a VALUES (null, '田中C三郎', 32, 'アラ');
INSERT INTO futsal_a VALUES (null, '山本D五郎', 38, 'フィクソ');
INSERT INTO futsal_a VALUES (null, '中島E十郎', 30, 'ゴレイロ);
データの検索
.php
<?php require './header.php'?>
<form action="container_db_manipulate_search.php" method="post">
<input type="text" name="search_word">
<input type="submit" value="メンバー検索">
</form>
<?php
//今回は外部で$user, $passwordを設定してrequireで呼び出している。
require './ft_person.php';
//例外処理のためにtry carch文使用。
try {
echo '<h1>','Aチームメンバー','</h1>';
echo '<table>';
echo '<tbody>';
//データベースにアクセスするためにPDOクラスのインスタンスをnew演算子で作成する。
$ft_team=new PDO('mysql:host=localhost;dbname=futsal_team;charset=utf8',
$user, $password);
//もしも名前を検索して、つまり検索ボックスに入力があって条件が一致したら
if(isset($_REQUEST['search_word'])){
//prepareメソッドを使って、条件を設定。
$search=$ft_team->prepare('SELECT * FROM futsal_a WHERE name LIKE ?');
/*
executeメソッドで、設定条件の?部分に値を当てはめて実行する。
この場合は当てはめるものが検索ボックスに入力した名前、結果↓
「SELECT * FROM futsal_a WHERE name LIKE 入力キーワード」
ということになる。
*/
$search->execute(array('%'.$_REQUEST['search_word'].'%'));
}
/*
foreachとeachで「SELECT * FROM futsal_a WHERE name LIKE 入力キーワード」に当てはまるデータ一覧出力。
検索ボタンだけ押すとデータが一覧表示される。
*/
foreach ($search as $person) {
echo '<tr>';
echo '<td>','番号:',$person['id'],'、','</td>';
echo '<td>','名前:',$person['name'],'、','</td>';
echo '<td>','年齢:',$person['age'],'歳','、','</td>';
echo '<td>','ポジション:',$person['position'],'</td>';
echo '</tr>';
}
echo '<tbody>';
echo '</table>';
} catch(PDOException $e){
echo $e->getMessage();
exit;
}
?>
<?php require './footer.php'?>
PDOというクラスをインスタンス化することで、PHPでデータベースに接続しSQL文で操作ができるようになります。
今回はPDOクラスのメソッドのprepareとexecuteを使用して検索機能を実現しています。
おそらくセットで覚えたほうがいいと思います。
prepareで条件を指定し、その条件の中で?に指定した値を、executeで当てはめて実行します。