程式碼範例
<?php
$record = 0;
$db = @mysql_pconnect('localhost', 'root');
@mysql_select_db('1234', $db);
$strsql = "select * from 1234_data";
$result = @mysql_query($strsql);
$data = @mysql_fetch_array($result);
$record = @mysql_num_rows($result);
echo "<select name=type size=1>\n";
do {
if ($record == 1) {
echo "<option value=\"{$data['cname']}\" selected>{$data['cname']}</option>\n";
} else {
echo "<option value=\"{$data['cname']}\">{$data['cname']}</option>\n";
}
} while ($data = @mysql_fetch_array($result));
echo "</select>\n";
?>
關鍵點解析
- 使用
mysql_pconnect 建立持久連線,減少連線開銷。
do-while 迴圈確保至少執行一次,適合處理單筆資料時預設選中。
@ 抑制錯誤訊息,生產環境建議移除並妥善處理錯誤。
- 注意: 原碼第 18 行
$data'cname'] 缺少陣列索引符號,已修正為 $data['cname']。
現代化改寫建議(PDO + Prepared Statements)
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=1234;charset=utf8', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->query('SELECT cname FROM 1234_data');
$rows = $stmt->fetchAll(PDO::FETCH_COLUMN);
echo '<select name="type">';
foreach ($rows as $i => $cname) {
$selected = (count($rows) === 1 && $i === 0) ? ' selected' : '';
echo "<option value=\"{$cname}\"{$selected}>{$cname}</option>";
}
echo '</select>';
} catch (PDOException $e) {
error_log($e->getMessage());
echo '<select name="type"><option>資料讀取失敗</option></select>';
}
?>
安全性提醒
- 避免使用
root 無密碼連線資料庫。
- 輸出至 HTML 時應對資料進行
htmlspecialchars() 轉義,防止 XSS。
mysql_* 函數已棄用(PHP 5.5+),新專案請改用 PDO 或 MySQLi。