databaseの手書き接続まとめ
環境
xampp
mysqlとApacheが必要です。
なぜこの記事を書こうと思ったのか?
主に3つあります。
1.databaseのPDO形式が多く手書き入力のサイト記事が全くないこと。
2.Qiitaにいつもお世話になっているから
3.いつでもアクセスできるように記事として残しておきたい
登録するためのdatabase
まずここで登録するdataを確認
database名:bowring
table:player
id: auto_increment,int型
name:varchar型
//mysqli_connectはホスト名,ユーザー名,パスワード,database名の順で記述すること
$cn = mysqli_connect("localhost", "root" , "" , "bowling" );
//utf8は言語を設定:utf-8という記述は×
mysqli_set_charset($cn,'utf8');
//sql文記述
$sql = "INSERT INTO player (name) VALUES ('hogehoge');";
//queryで実行するという意味
mysqli_query($cn,$sql);
mysqli_close($cn);
VALUESの後に注目
varchar型を用いる場合はシングルクォーテーションを含み、記述すること。
私はこの処理に2時間悩んでいました(泣)
$id = 1;
$name = 'hogehoge';
//db接続
$cn = mysqli_connect("localhost", "root" , "" , "bowling" );
mysqli_set_charset($cn,'utf8');
$sql = "INSERT INTO player (id,name) VALUES ($id,'$name');";
mysqli_query($cn,$sql);
mysqli_close($cn);
SELECT文で全件取り出す。
$cn = mysqli_connect("localhost", "root" , "" , "bowling" );
mysqli_set_charset($cn,'utf8');
//プレイヤーテーブルから全件取り出し
$sql = "SELECT * FROM player";
//実行して$resultの中に入れる
$result = mysqli_query($cn,$sql);
//空配列
$player_list = [];
//表示結果(フィールド)をひとつづつループで回し、$player_listに代入する
while($row = mysqli_fetch_assoc($result)){
$player_list[] = $row;
}
mysqli_close($cn);
//全件表示;配列で表示するため、foreachで回す
foreach($player_list as $player_lists){
echo $player_lists['id'].$player_lists['name']."<br>";
}
もっと楽にできるfunction処理
皆さん、functionをご存じでしょうか?
知らない人もいるとは思いますのでこちらの記事を参考にどうぞ!!!
https://techacademy.jp/magazine/4925
簡単にご説明すると関数を呼び出すだけで何百行という処理を一行で書くことが可能になります。
function set_player($sql,$host , $db_user , $db_pass , $db){
$cn = mysqli_connect($host , $db_user , $db_pass , $db );
mysqli_set_charset($cn,'utf8');
mysqli_query($cn,$sql);
mysqli_close($cn);
}
//ここにsql文と接続所を記述するだけで呼び出し可能:
set_player("INSERT INTO player(id) VALUES(1)","localhost" , "root","","bowling");
function get_player($host , $db_user , $db_pass , $db ){
$sql = "SELECT * FROM player";
$cn = mysqli_connect($host , $db_user , $db_pass , $db );
mysqli_set_charset($cn,'utf8');
$result = mysqli_query($cn,$sql);
$player_list = [];
while($row = mysqli_fetch_assoc($result)){
$player_list[] = $row;
}
mysqli_close($cn);
//returnで返すことによってより広範囲で可能
return $player_list;
}
//
$player_list = get_player("localhost" , "root","","bowling");
//全件表示;配列で表示するため、foreachで回す
foreach($player_list as $player_lists){
echo $player_lists['id'].$player_lists['name']."<br>";
}
SQLインジェクション対策についての手書き入力
また、文字の種類にも注意すること
i 対応する変数の型は integer です。
d 対応する変数の型は double です。
s 対応する変数の型は string です。
b 対応する変数の型は blob で、複数のパケットに分割して送信されます。
function set_player($host , $db_user , $db_pass , $db , $name){
$cn = mysqli_connect($host , $db_user , $db_pass , $db );
mysqli_set_charset($cn,'utf8');
$stmt = mysqli_prepare($cn,"INSERT INTO player (name) VALUES (?);");
$sql = mysqli_stmt_bind_param($stmt,'s',$name);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($cn);
}
//set_player("localhost" , "root","","bowling","hogehoge");