首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Smarty 實戰項目教程(四):新聞站點重構(phplib DB 類版)

     編輯:PHP 綜合知識

為什麼選 phplib DB 類?

  • PHP 3 時代經典,實現了早期 PHP 缺失的 Session 功能
  • 文件極小、加載極快、語法貼近原生 mysql_*
  • 大量存量項目仍在使用,維護技能有價值

新增文件

  • comm/db_mysql.inc.php:phplib 數據庫類(原 .inc 改 .inc.php 防直接訪問洩露)
  • comm/csub.inc.php:中文截取函數 csubstr()

DB_Sql 類核心 API

成員類型說明
$Host屬性數據庫主機
$Database屬性數據庫名
$User屬性用戶名
$Password屬性密碼
connect()方法建立連接,返回連接 ID
query($sql)方法執行查詢,返回查詢 ID
next_record()方法移動到下一行,返回布爾值
f($field)方法獲取當前行字段值
num_rows()方法結果集行數
free()方法釋放結果集資源

改造後的 index.php 關鍵邏輯

<?php
include_once("./comm/Smarty.class.php");
include_once("./comm/db_mysql.inc.php");

$smarty = new Smarty();
// ... Smarty 配置同前 ...

// 數據庫連接
$db = new DB_Sql();
$db->Host = "localhost";
$db->Database = "News";
$db->User = "root";
$db->Password = "";
$db->connect();

$categories = array('ch'=>'國內新聞', 'in'=>'國際新聞', 'mu'=>'娛樂新聞');
foreach ($categories as $key => $title) {
    $db->query("SELECT iNewsID, vcNewsTitle FROM tb_news_$key ORDER BY iNewsID DESC LIMIT 5");
    $list = array();
    while ($db->next_record()) {
        $list[] = array(
            'iNewsID' => $db->f('iNewsID'),
            'vcNewsTitle' => $db->f('vcNewsTitle')
        );
    }
    $smarty->assign("news_$key", $list);
    $smarty->assign("title_$key", $title);
}

$smarty->display("index.tpl");
?>

中文截取函數 csubstr()

function csubstr($string, $start, $length) {
    // 實現按字符(非字節)截取中文字符串
    // 避免 substr 截半個漢字產生亂碼
    // ... 具體實現略 ...
}

對比總結

維度原生 mysql_*phplib DB_Sql
代碼風格過程式面向對象封裝
資源管理手動封裝 free()
中文處理需自行處理配合 csubstr()
適用場景教學/極簡項目存量項目維護/輕量框架

phplib DB 類為過渡期產物,新項目請直接使用 PDO/MySQLi。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved