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


 

tableの中から選んだ職種を表示させます

変数を設定します

    $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名
    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';            
        }
//社員番号順にtableから3つのカラムを取得する
$query = 'SELECT emp_id, emp_name, job, age FROM emp_table 
         ORDER BY emp_id ASC';

ORDER BYは順序を決めます。

  • ASC・・・昇順
  • DESC・・・降順
//社員番号順にtableから3つのカラムの中から選んだ職種を取得
$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";

クエリを実行する

        $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を返す。

        mysqli_free_result($result);
        mysqli_close($link);
     

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

全てのコード

<?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>