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

PHP 連接 MySQL 完整實戰指南:從環境配置到增刪改查

     編輯:PHP 相關知識

一、環境準備與擴展啟用

現代 PHP (7.0+) 已移除 mysql_* 系列函數,請使用 mysqli 或 PDO_MySQL。

Windows (XAMPP / 手動安裝)

  1. 打開 php.ini,啟用擴展:
extension=mysqli
extension=pdo_mysql
  1. 確認 libmysql.dll (PHP 7) 或 mysqlnd (PHP 8+ 內建) 可用。
  2. 重啟 Apache / php-fpm:sudo systemctl restart php8.2-fpm 或重啟 XAMPP。
  3. 驗證:php -m | grep mysql 應顯示 mysqli、pdo_mysql、mysqlnd。

Linux (Ubuntu/Debian)

sudo apt update && sudo apt install php-mysql php-pdo-mysql
sudo systemctl restart php8.2-fpm

二、連接配置最佳實踐

config/database.php

<?php
return [
    'host'     => '127.0.0.1',
    'port'     => 3306,
    'user'     => 'app_user',
    'pass'     => 'strong_password',
    'name'     => 'my_app',
    'charset'  => 'utf8mb4',
    'options'  => [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false, // 真正預處理
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci",
    ],
];

三、PDO 連接與基礎操作 (推薦)

<?php
$config = require 'config/database.php';
$dsn = "mysql:host={$config['host']};port={$config['port']};dbname={$config['name']};charset={$config['charset']}";

try {
    $pdo = new PDO($dsn, $config['user'], $config['pass'], $config['options']);
    echo "連接成功\n";
} catch (PDOException $e) {
    die("連接失敗: " . $e->getMessage());
}

// 查詢
$stmt = $pdo->query("SELECT id, title FROM articles ORDER BY id DESC LIMIT 10");
foreach ($stmt as $row) {
    echo "{$row['id']}: {$row['title']}\n";
}

// 預處理新增
$ins = $pdo->prepare("INSERT INTO articles (title, content, created_at) VALUES (?, ?, NOW())");
$ins->execute(['標題', '內容']);
echo "新增 ID: " . $pdo->lastInsertId();

// 事務示例
try {
    $pdo->beginTransaction();
    $pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    $pdo->exec("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    throw $e;
}
?>

四、mysqli 面向對象風格 (備選)

<?php
$mysqli = new mysqli($host, $user, $pass, $db, $port);
$mysqli->set_charset('utf8mb4');

if ($mysqli->connect_errno) {
    die("連接失敗: " . $mysqli->connect_error);
}

$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) { /* ... */ }
$result->free();
$mysqli->close();

五、常見錯誤排查表

錯誤原因解決
Call to undefined function mysql_connect()PHP 7+ 移除舊擴展改用 mysqli/PDO
Access denied for user賬號/密碼/主機不匹配檢查 GRANT、FLUSH PRIVILEGES
Can't connect to MySQL server服務未啟動/端口/防火牆systemctl start mysql; 檢查 3306
Character set 'utf8mb4' unsupportedMySQL 版本過舊 (< 5.5.3)升級 MySQL 或用 utf8
Packets out of ordermax_allowed_packet 過小調大 my.cnf: max_allowed_packet=64M

六、安全加固清單

  • ✅ 僅允許應用服務器 IP 訪問 3306 (安全組/防火牆)
  • ✅ 應用賬號最小權限 (無 DROP、FILE、GRANT)
  • ✅ 所有查詢使用預處理語句
  • ✅ 啟用 SSL 連接: PDO::MYSQL_ATTR_SSL_CA 等
  • ✅ 定期輪換密碼、審計慢查詢日誌

遵循以上規範,即可構建穩定、安全、高效的 PHP + MySQL 應用基礎設施。

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