おぞねです。
LoLTeamMakerのブラウザ版を鋭意作成中ですが、Webサービスの作成は初なので、わからないことだらけです。
現在ログインシステムを作成していますが、PHPでデータベース(MariaDB(MySQL))に接続する方法が難しかったので備忘録です。
全体のコード
try{
$dbh = new PDO(
'mysql:host=localhost;dbname=loltm;charset=utf8mb4',
'XXXXXXX',
'YYYYYYY',
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
)
);
$prepare = $dbh->prepare('select userName, password from registration where userName = ?;');
$prepare->bindvalue(1,$id,PDO::PARAM_STR);
$prepare->execute();
$result = $prepare->fetch();
echo "<p>DB読み込み成功</p>";
} catch (PDOException $e) {
$error = $e->getMessage();
echo "<p>DB読み込み失敗</p>"."$error";
}
$idはログイン時に指定されるユーザ名が格納されています。
PDO
$dbh = new PDO(
'mysql:host=localhost;dbname=loltm;charset=utf8mb4',
'XXXXXXX',
'YYYYYYY',
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
)
);
(PHP Data Objects)を作成。
PDO(データベース情報,データベースユーザ名,パスワード,オプション); と指定する。
オプションについては割愛。上記指定をすると例外をスローし、静的プレースホルダを使用する。
SQL実行準備
$prepare = $dbh->prepare('select userName, password from registration where userName = ?;');
$prepare->bindvalue(1,$id,PDO::PARAM_STR);
次にSQL実行準備をするが、動的に変更したい部分をプレースホルダにする(今回の場合は”?”の箇所)。
ログイン時に入力される名前を用いてパスワードを参照するため、userName = ? と指定しています。
その後、bindvalueで、プレースホルダに$idを指定しています。
bindvalueで指定している”1″は、1つ目の?であることを意味します。
⇒prepare()で、複数プレースホルダを指定している場合に、1,2,3…でどのプレースホルダか指定する。
PARAM_STRは文字列であることを意味します。
実行
$prepare->execute();
$result = $prepare->fetch();
execute()で準備したSQLを実行します。
fetch()で実行結果を$resultに格納しています。
select userName, passwordを指定しているため、$result[0]にselect userName結果が、 $result[1]にselect passwordの結果が格納されます。
以上です。理解が浅いので間違いがあればご指摘お願いいたします。
それではまた。