1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-17

 
コメント 2020-03-17 214706.png

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>
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?