next up previous contents
Next: SQL Injection 注入 Up: Duplicates 重複紀錄 Previous: 刪除重複紀錄   Contents   DYWANG_HOME

實機操作練習題

  1. 前置處理
    1. 遠端登入 kvm8 虛擬機。
    2. 以 root 身份登入 mariadb。
    3. 在資料庫 dbd 進行以下資料表的處理,如果資料庫 dbd 不存在,請自行產生。
  2. 避免重複紀錄
    1. 建立資料表 dup1,包含下列欄位,設定 lname 與 fname 組合為 primary key。
      1. lname char(20) not null,
      2. fname char(20) not null,
      3. sex char(5)
    2. 使用以下 php 範例程式,其中 ........ 依要求填入 mariadb 語法。
      <?php
      $dbhost = 'localhost:3306';
      $dbuser = 'root';
      $dbpass = '123qwe';
      $lname = $_GET['lname'];
      $fname = $_GET['fname'];
      $sex = $_GET['sex'];
      $conn = mysqli_connect($dbhost, $dbuser, $dbpass) 
      	or die(mysqli_connect_error().PHP_EOL);
      mysqli_select_db( $conn, 'dbd' )
      	or die('Error: '.mysqli_error($conn).PHP_EOL);
      $sql = ".............";
      mysqli_query( $conn, $sql )
      	or die('Error: '.mysqli_error($conn).PHP_EOL);
      mysqli_close($conn);
      ?>
      
    3. 三個 GET 變數$_GET['lname'], $_GET['fname'], $_GET['sex'] 由網址加問號取得內容,如以下範例三個變數分別為 lname=wang, fname=dy, sex=M。
      http://kvm8.deyu.wang/dup1.php?lname=wang&fname=dy&sex=M
      
    4. dup1a.php:在 dup1 資料表新增紀錄,若 primary key 重複時只是不新增,但不能出現紀錄重複的錯誤訊息「Duplicate entry....」。
    5. dup1b.php:在 dup1 資料表新增紀錄,若 primary key 重複時取代舊紀錄。
  3. 重複紀錄計算與查詢
    1. 下載檔案 dup2.tbl,將其匯入 dbd。
    2. 承上題 PHP 範例,修改 mysqli_query 函式,列印其輸出的第一個欄位。
      $retval=mysqli_query( $conn, $sql )
      	or die('Error: '.mysqli_error($conn).PHP_EOL);
      echo mysqli_fetch_row($retval)[0];
      mysqli_free_result($retval);
      
    3. dup2a.php:由 get 指定 lname,搜尋 lname 符合的資料,並計算 dup2 資料表 lname 組合 fname 重複的紀錄筆數,只輸出「筆數」。
    4. dup2b.php:由 get 指定 sex,搜尋 sex 符合的資料,並計算 dup2 資料表所有欄位都相同的紀錄筆數,只輸出「筆數」。
    5. dup2c.php:使用 distinct 查詢 dup2 資料表 lname 及 fname 組合不重複紀錄 限制只列印一筆且 offset 參數由 GET 變數 $_GET['offset'] 取得。
    6. dup2d.php:使用 select ... group by .. 查詢 dup2 資料表 lname 及 fname 組合不重複紀錄,限制只輸出 lname、列印一筆且 offset 參數由 GET 變數 $_GET['offset'] 取得。
  4. 刪除重複紀錄
    1. 下載檔案 dup3.tbl,將其匯入 dbd。
    2. 刪除欄位 name, sex 組合重複的紀錄。
    3. 設定欄位 id 為 int unsigned not null auto_increment
    4. 設定欄位 id 為 primary key,重新編號且從 60 開始。
    5. 新增一筆紀錄 (julia , F)。


De-Yu Wang 2020-04-07