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

PHP 開發實用技巧:phpMyAdmin 設定、中文編碼、靜態頁生成與資料庫操作全攻略

     編輯:PHP 綜合知識

前言

在 PHP 開發過程中,經常會遇到環境配置、編碼問題、靜態頁生成等常見需求。本文整理了六個實用的 PHP 開發技巧,涵蓋 phpMyAdmin 設定、密碼登入、mbstring 擴展、中文亂碼解決、靜態頁生成兩大流派,以及 MySQL 資料庫讀取操作詳解,幫助開發者快速解決實際問題。

一、phpMyAdmin 2.9 版本配置文件位置

許多網路教學針對的是舊版 phpMyAdmin,導致新手找不到 2.9 版的配置文件。正確的配置文件相對路徑為:config.sample.inc.php(而非 libraries/config.default.inc.php)。將其複製並重命名為 config.inc.php 即可開始配置。

二、啟用 phpMyAdmin 密碼登入(Cookie 認證模式)

修改 config.inc.php,設定以下參數即可啟用密碼登入:

$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['blowfish_secret'] = 'your_random_string'; // 必填,任意非空字串
$cfg['DefaultLang'] = 'zh'; // 可選,預設顯示中文介面

blowfish_secret 用於 Cookie 加密,請務必設定一組複雜的隨機字串以確保安全。

三、解決「缺少 mbstring 擴展」導致寬字元集問題

若出現「未發現 PHP 的 mbstring 擴展」提示,請編輯 php.ini,啟用擴展:

extension=php_mbstring.dll

修改後必須重啟 Web 伺服器(Apache/IIS)才能生效。此擴展對處理中文、日文等多位元組字元至關重要。

四、PHP 讀取 MySQL 中文資料顯示問號(亂碼)的解決方案

在執行查詢 SQL 前,先設定連線字元集:

mysql_query("SET NAMES 'gb2312'"); // 或 utf8、big5,視資料庫編碼而定

此指令告知 MySQL 客戶端、連線、結果三者均使用指定編碼,徹底解決中文亂碼問題。建議在資料庫連線建立後立即執行。

五、PHP 生成靜態頁面的兩大主流方法

生成靜態頁面能大幅降低伺服器負載、提升存取速度,主要有「模板引擎法」與「Output Buffering(OB)函數法」兩種思路。

方法一:利用模板引擎(以 Smarty 為例)

優點:程式碼結構清晰、邏輯與顯示分離、可讀性高、易於維護。

<?php
require('smarty/Smarty.class.php');
$tpl = new Smarty;
$tpl->assign('title', 'Hello World!');
// 獲取渲染後的內容,而非直接輸出
$content = $tpl->fetch('templates/index.htm');
$fp = fopen('archives/2005/05/19/0001.html', 'w');
fwrite($fp, $content);
fclose($fp);
?>

核心在於 fetch() 方法,它回傳處理好模板變數後的字串,而非直接輸出到瀏覽器。

方法二:利用 OB 系列函數(輸出緩衝控制)

優點:不依賴第三方庫、靈活控制任意 PHP 輸出、適用於舊專案快速改造。

<?php
ob_start(); // 開啟輸出緩衝
echo 'Hello World!'; // 所有輸出暫存於記憶體緩衝區
$content = ob_get_contents(); // 獲取緩衝區內容
$fp = fopen('0001.html', 'w');
fwrite($fp, $content);
fclose($fp);
ob_end_flush(); // 釋放緩衝區並輸出到瀏覽器(可選)
?>

關鍵函數:ob_start() 開啟緩衝、ob_get_contents() 獲取內容(相當於 Smarty 的 fetch)、ob_end_flush() 結束緩衝並輸出。

六、PHP 連接 MySQL 資料庫並讀取資料完整範例

以下範例展示連接本機 MySQL(port 3306)、選擇資料庫、查詢資料表 abc 並以三種方式輸出結果。

<?php
// 1. 連接資料庫
$dbh = @mysql_connect('localhost:3306', 'root', '9999');
if (!$dbh) die('資料庫連線失敗');

// 2. 選擇資料庫
@mysql_select_db('ok', $dbh);

// 3. 執行查詢
$sql = 'SELECT * FROM abc';
$rs = mysql_query($sql, $dbh);
if (!$rs) die('查詢執行失敗');

// === 方法一:mysql_fetch_row() 回傳數值索引陣列 ===
echo '<table><tr><th>ID</th><th>Name</th></tr>';
while ($row = mysql_fetch_row($rs)) {
    echo "<tr><td>$row[0]</td><td>$row[1]</td></tr>";
}
echo '</table>';

// 重置指標以示範其他方法
mysql_data_seek($rs, 0);

// === 方法二:mysql_fetch_object() 回傳物件 ===
while ($row = mysql_fetch_object($rs)) {
    echo "$row->id $row->name<br />";
}

mysql_data_seek($rs, 0);

// === 方法三:mysql_fetch_array() 回傳關聯+數值陣列(效能最佳) ===
while ($row = mysql_fetch_array($rs)) {
    echo "{$row['id']} {$row['name']}<br />";
}

// 4. 關閉連線
@mysql_close($dbh);
?>

效能提示: mysql_fetch_array() 預設同時包含關聯與數值索引,記憶體佔用較大;若僅需關聯索引,建議使用 mysql_fetch_assoc()。另請注意 mysql_* 函數已於 PHP 7.0 移除,新專案請改用 mysqli 或 PDO。

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