:::

7-1 取得指定的新聞資料數

  1. 首先,一樣請AI來代勞:
    資料庫欄位如下,請用PHP8製作一個函數 all(),可以指定要從第幾筆開始,列出幾筆資料,並依照日期由新到舊排序,最後傳出資料陣列。
    參數請用用?佔位符的方式處理
    有json格式的欄位,也請轉成陣列,最後傳回該筆資料的所有值。
    資料需要過濾,包括json轉陣列的欄位,避免XSS攻擊
    資料庫物件$pdo已經存在,無須重新執行資料庫連線。
    
    CREATE TABLE `school_news` (
      `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '編號',
      `news_title` VARCHAR(255) NOT NULL COMMENT '新聞標題',
      `news_content` TEXT NOT NULL COMMENT '新聞內容',
      `related_link` VARCHAR(255) COMMENT '相關連結',
      `publisher` VARCHAR(100) NOT NULL COMMENT '發布者',
      `school_name` VARCHAR(100) NOT NULL COMMENT '學校名稱',
      `report_date` DATE NOT NULL COMMENT '報導日期',
      `upload_type` ENUM('image', 'youtube') NOT NULL COMMENT '上傳種類',
      `youtube_url` VARCHAR(255) COMMENT 'Youtube影片網址',
      `media` JSON COMMENT '多檔案JSON資訊',
      `views` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '點閱數',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    

     

  2. 最後得到:
    function all(int $start = 0, int $limit = 10): array
    {
        global $pdo;
    
        $query = "SELECT * FROM school_news ORDER BY report_date DESC LIMIT ?, ?";
        
        $stmt = $pdo->prepare($query);
        $stmt->bindValue(1, $start, PDO::PARAM_INT);
        $stmt->bindValue(2, $limit, PDO::PARAM_INT);
        $stmt->execute();
    
        $results = [];
    
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            // 處理JSON欄位
            if (isset($row['media']) && !empty($row['media'])) {
                $row['media'] = json_decode($row['media'], true);
            }
    
            // XSS過濾
            array_walk_recursive($row, function(&$item) {
                if (is_string($item)) {
                    $item = htmlspecialchars($item, ENT_QUOTES, 'UTF-8');
                }
            });
    
            $results[] = $row;
        }
    
        return $results;
    }
    

     

  3. 由於列表也會用到輪播圖,所以,一樣加入圖片的json內容,以及主要圖片設定,另外也取得主要的縮圖
    function all(int $start = 0, int $limit = 10): array
    {
        global $pdo;
    
        $query = "SELECT * FROM school_news ORDER BY report_date DESC LIMIT ?, ?";
    
        $stmt = $pdo->prepare($query);
        $stmt->bindValue(1, $start, PDO::PARAM_INT);
        $stmt->bindValue(2, $limit, PDO::PARAM_INT);
        $stmt->execute();
    
        $results = [];
    
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            // 處理JSON欄位
            if (isset($row['media']) && !empty($row['media'])) {
                $row['media'] = json_decode($row['media'], true);
            }
    
            // XSS過濾
            array_walk_recursive($row, function (&$item) {
                if (is_string($item)) {
                    $item = htmlspecialchars($item, ENT_QUOTES, 'UTF-8');
                }
            });
    
            $row['media_json']  = convertMediaToJson($row['media']);
            $row['main_image']  = array_key_first($row['media']);
            $row['thumb_image'] = reset($row['media']);
            $results[] = $row;
        }
    
        return $results;
    }
    

     


:::

書籍目錄

展開 | 闔起

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D2025%26tbsn%3D55

計數器

今天: 1030103010301030
昨天: 2027202720272027
總計: 7972071797207179720717972071797207179720717972071