database接続の手書き入力について

#databaseの手書き接続まとめ

環境
xampp
mysqlとApacheが必要です。

なぜこの記事を書こうと思ったのか？
主に3つあります。

1.databaseのPDO形式が多く手書き入力のサイト記事が全くないこと。

2.Qiitaにいつもお世話になっているから

3.いつでもアクセスできるように記事として残しておきたい

##登録するためのdatabase

まずここで登録するdataを確認

database名:bowring
table:player
id: auto_increment,***int型***
name:***varchar型***


```php:database接続：基本構文(INSERT,UPDATE,DELETEで有効)
  //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時間悩んでいました（泣）

```php:varchar,int型での注意
$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文で全件取り出す。
```php: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

簡単にご説明すると関数を呼び出すだけで何百行という処理を一行で書くことが可能になります。

```php:database接続：基本構文(INSERT,UPDATE,DELETEで有効)
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");
```

```php:##SELECT文で全件取り出す。
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 で、複数のパケットに分割して送信されます。



```php:SQLインジェクション対策
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");
```