PHPによるデータベース操作

　
![コメント 2020-03-17 214706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560686/30919a55-80d2-8c1d-666c-30915b22883d.png)
## tableの中から選んだ職種を表示させます 

### 変数を設定します
```php
    $job = '';//selectの中の値
    $host = '';//データベースのホスト名またはIPアドレス
    $username = '';//ユーザー名
    $passwd = '';//パスワード
    $dbname = '';//データベース名
    //データベースの情報を渡して接続する値を$linkに代入する
    $link = mysqli_connect($host, $username, $passwd, $dbname);
``` 
myspli_connectの　"()"　内がデータベースの接続に必要な情報で、これを
渡すことで接続できます。
返り値はリンクIDで、**接続したデータベースを特定するID**となっています。
 


* emp_idは社員番号
* emp_nameは名前
* emp_tableはtable名
  
```php
    if($link) {
        //文字化け防止
        mysqli_set_charset($link, 'utf8');
        //最初か全部選択を選んだ時
        if($job === '' || $job === '全部選択') {
　　　　//実行する内容を$queryに代入する　
            $query = 'SELECT emp_id, emp_name, job, age FROM emp_table 
                    ORDER BY emp_id';
　　　　//他の職種を選んだ時
        } else {
        //実行する内容を$queryに代入する    
　　　　 $query = 'SELECT emp_id, emp_name, job, age FROM emp_table 
                    WHERE job = "'.$job.'" ORDER BY emp_id';            
        }
```



```php
//社員番号順にtableから３つのカラムを取得する
$query = 'SELECT emp_id, emp_name, job, age FROM emp_table 
         ORDER BY emp_id ASC';
```

ORDER BYは順序を決めます。

* ASC・・・昇順
* DESC・・・降順

```php
//社員番号順にtableから３つのカラムの中から選んだ職種を取得
$query = 'SELECT emp_id, emp_name, job, age FROM emp_table 
          WHERE job = "'.$job.'" ORDER BY emp_id';  
```
WHERE　条件を決めます。
変数は文字列の中ではそのまま使えないので、このような記述となっています。
ちなみにこちらのほうが分かりやすいですね。

```
$query = "SELECT emp_id, emp_name, job, age FROM emp_table 
          WHERE job = '$job' ORDER BY emp_id";

```
### クエリを実行する
```php        
        $result = mysqli_query($link, $query);
        //1行ずつ配列を取得する
        while($row = mysqli_fetch_array($result)) {
        //取得したデータを配列にする    
　　　　 $goods_data[] = $row;           
        }

```
mysqli_query()は、SELECTだった場合は選択されたデータが返ってくる。
UPDATE,DELETEだった場合はtrue,falseを返す。

mysqli_fetch_array()は、成功すると行の配列を、行がなくなればnull,
失敗するとfalseを返す。

```php
        mysqli_free_result($result);
        mysqli_close($link);
    　
```
mysqli_free_result()は、保存されているメモリを開放する
mysqli_query()で取得したデータを利用した場合すぐに開放しましょう。
mysqli_close()はデータベースから切断します。




##全てのコード
```php
<?php
    $job = '';
    $host = '';
    $username = '';
    $passwd = '';
    $dbname = '';
    //データベースの情報を渡して接続する値を$linkに代入する
    $link = mysqli_connect($host, $username, $passwd, $dbname);
    
    if(isset($_GET['job'])=== true) {
        $job = $_GET['job'];        
    }
    if($link) {
        //文字化け防止
        mysqli_set_charset($link, 'utf8');
        if($job === '' || $job === '全部選択') {
            $query = 'SELECT emp_id, emp_name, job, age FROM emp_table 
                    ORDER BY emp_id';
        } else {
            $query = "SELECT emp_id, emp_name, job, age FROM emp_table 
                    WHERE job = '$job' ORDER BY emp_id";
            
        }
        //クエリを実行
        $result = mysqli_query($link, $query);
        //1行ずつ配列を取得する
        while($row = mysqli_fetch_array($result)) {
            $goods_data[] = $row;
            // var_dump($row);
        }
        mysqli_free_result($result);
        mysqli_close($link);
    }
?>
<!DOCTYPE html>
<html lang="ja">
<head>
   <meta charset="UTF-8">
   <title>サンプル</title>
   <style type="text/css">
       table, td, th {
           border: solid black 1px;
       }
       table {
           width: 200px;
       }
   </style>
</head>
<body>
    <p>表示する職種を選択してください。</p>
   <form>
       <select name="job">
           <option>全部選択</option>
           <option>manager</option>
           <option>analyst</option>
           <option>clerk</option>           
       </select>
       <input type="submit" value="表示">
   </form>
   <table>
       <tr>
           <th>社員番号</th>
           <th>名前</th>
           <th>職種</th>
           <th>年齢</th>
       </tr>
<?php
foreach ($goods_data as $value) {
?>
        <tr>
            <td><?php print htmlspecialchars($value['emp_id'], ENT_QUOTES, 'UTF-8'); ?></td>
            <td><?php print htmlspecialchars($value['emp_name'], ENT_QUOTES, 'UTF-8'); ?></td>
            <td><?php print htmlspecialchars($value['job'], ENT_QUOTES, 'UTF-8'); ?></td>
            <td><?php print htmlspecialchars($value['age'], ENT_QUOTES, 'UTF-8'); ?></td>
        </tr>
<?php
}
?>
   </table>
</body>
</html>