<?php
$con = mysql_connect("localhost", "root", "toor");
if (!$con) { echo "連線失敗"; exit(); }
mysql_select_db("test");
mysql_query("set names utf8");
$sql = "select * from test1";
$res = mysql_query($sql, $con);
while ($row = mysql_fetch_row($res)) {
echo "$row[0]-------------$row[1]-----------$row[2]-----------$row[3]-----------$row[4]".'
';
}
mysql_free_result($res);
mysql_close($con);
?>
<?php
$mysqli = new MySQLi("localhost", "root", "toor", "test");
if ($mysqli->connect_error) {
die("連線失敗 錯誤訊息:" . $mysqli->connect_error);
} else {
echo "連線成功<br/>";
}
$sql = "select * from test.test1";
$res = $mysqli->query($sql);
while ($row = $res->fetch_row()) {
foreach ($row as $key => $value) {
echo $value . " ";
}
echo "<br/>";
}
$res->free();
$mysqli->close();
?>
| 特性 | mysql (程序式) | mysqli (物件導向) |
|---|---|---|
| 連線方式 | 分步驟:連線 → 選庫 → 設編碼 | 建構子一次完成 |
| 錯誤處理 | 需手動檢查每步回傳值 | 物件屬性 connect_error 統一處理 |
| 查詢執行 | mysql_query($sql, $con) | $mysqli->query($sql) |
| 結果遍歷 | mysql_fetch_row($res) | $res->fetch_row() |
| 資源釋放 | mysql_free_result() / mysql_close() | $res->free() / $mysqli->close() |
| 程式碼複雜度 | 較高,重複參數傳遞 | 較低,封裝性佳 |
| 安全性 | 無預處理支援 | 支援預處理語句,防 SQL 注入 |
MySQLi 不僅在設計哲學上更先進,程式碼也更簡潔安全。學習完舊版 mysql 後,務必掌握 MySQLi,這是現代 PHP 開發的必備技能。