首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 啟動連接完全指南:二進制客戶端、PHP 連接與函數速查

     編輯:MySQL 資料庫相關知識

二進制客戶端連接

標準連接命令

# 本地連接
mysql -u root -p
# 遠程連接
mysql -h 192.168.1.100 -u app -p -P 3306
# 指定默認庫
mysql -u root -p testdb
# 直接執行 SQL
mysql -u root -p -e "SHOW DATABASES;"
# 批量模式 (適合腳本)
mysql -u root -p --batch --silent -e "SELECT * FROM t" testdb

連接參數速查

參數短參數說明
--host-h服務器主機名/IP
--user-u用戶名
--password-p密碼 (緊跟無空格或交互輸入)
--port-P端口號 (默認 3306)
--database-D默認數據庫
--socket-SUnix Socket 文件路徑
--execute-e直接執行 SQL 語句
--batch-B表格輸出 (Tab 分隔),非交互格式
--vertical-E垂直顯示結果集
--ssl-modeREQUIRED/PREFERRED/DISABLED

退出客戶端

EXIT;  \q  QUIT  Ctrl+D

PHP 連接 MySQL:mysqli 與 PDO

mysqli 面向對象 (推薦)

<?php
$host = 'localhost'; $user = 'root'; $pass = 'pass'; $db = 'testdb';
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_errno) {
    die('Connect failed [' . $mysqli->connect_errno . ']: ' . $mysqli->connect_error);
}

// 設置字符集
$mysqli->set_charset('utf8mb4');

// 執行查詢
$result = $mysqli->query('SELECT VERSION()');
$row = $result->fetch_row();
echo 'MySQL Version: ' . $row[0];

// 關閉連接 (腳本結束自動關閉,長連接池需手動)
$mysqli->close();
?>

mysqli 過程式風格

$link = mysqli_connect('localhost', 'root', 'pass', 'testdb');
if (!$link) die('Connect failed: ' . mysqli_connect_error());
mysqli_set_charset($link, 'utf8mb4');
mysqli_close($link);

PDO (數據庫無關、預處理更優雅)

<?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,  // 真實預處理
];
try {
    $pdo = new PDO($dsn, 'root', 'pass', $options);
    $stmt = $pdo->query('SELECT VERSION()');
    echo 'Version: ' . $stmt->fetchColumn();
} catch (PDOException $e) {
    die('Connection failed: ' . $e->getMessage());
}
?>

mysqli 核心函數速查表

分類函數/方法用途
連接管理mysqli_connect() / new mysqli()建立連接
mysqli_close() / $mysqli->close()關閉連接
mysqli_ping() / $mysqli->ping()檢查連接存活,斷線重連
mysqli_change_user()切換用戶/數據庫
查詢執行mysqli_query() / $mysqli->query()執行單條 SQL (返回結果集/布爾)
mysqli_prepare() / $mysqli->prepare()預處理語句
mysqli_stmt_execute() / $stmt->execute()執行預處理
mysqli_stmt_bind_param() / $stmt->bind_param()綁定參數
mysqli_stmt_bind_result() / $stmt->bind_result()綁定結果列
結果集處理mysqli_fetch_assoc() / $result->fetch_assoc()取關聯數組
mysqli_fetch_array() / $result->fetch_array()取混合數組
mysqli_fetch_object() / $result->fetch_object()取對象
mysqli_free_result() / $result->free()釋放結果集內存
事務控制mysqli_autocommit() / $mysqli->autocommit()開關自動提交
mysqli_commit() / $mysqli->commit()提交事務
mysqli_rollback() / $mysqli->rollback()回滾事務
元數據mysqli_insert_id() / $mysqli->insert_id獲取自增 ID
mysqli_affected_rows() / $mysqli->affected_rows影響行數
mysqli_error() / $mysqli->error錯誤信息

連接池與長連接最佳實踐

  • PHP-FPM 工作進程模型下,每請求建立連接開銷可接受,通常不需要顯式連接池
  • 若使用 Swoole/RoadRunner 等常駐內存框架,需自行實現連接池 (mysqli::real_connect 復用)
  • 持久連接 mysqli_pconnect() / PDO::ATTR_PERSISTENT 易導致「Too many connections」、事務殘留、狀態污染,生產環境不推薦
  • 監控 Threads_connected、Aborted_connects、Connection_errors_internal

常見連接錯誤排查

錯誤碼/信息原因解決
1045 Access denied用戶/密碼/主機不匹配檢查 mysql.user Host 列、密碼插件、防火牆
2003 Can't connect網絡不通/端口錯誤/服務未啟動telnet host 3306、檢查 bind_address、防火牆
2006 MySQL server has gone away連接超時/數據包過大/服務重啟增大 wait_timeout/max_allowed_packet、重連機制
1040 Too many connections連接數達上限增大 max_connections、排查泄漏、連接池
SSL connection errorSSL 證書/協議不匹配指定 --ssl-mode=DISABLED 或修復證書
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved