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

PHP操作MySQL數據增刪改查入門教程

     編輯:MySQL 綜合教學

PHP操作MySQL數據增刪改查入門教程

本文通過完整代碼示例,演示如何使用PHP原生mysql擴展(注意:PHP 7.0+已棄用,生產環境請用mysqli或PDO)連接MySQL,實現數據的插入與查詢操作,並講解編碼、加密、調試等關鍵技巧。

一、環境準備與連接

<?php
$host = 'localhost';
$user = 'root';
$pass = 'root123';
$dbname = 'test';

$conn = @mysql_connect($host, $user, $pass);
if (!$conn) {
    die('連接數據庫失敗:' . mysql_error());
}

mysql_select_db($dbname, $conn);

// 關鍵:設置字符集,防止中文亂碼
// PHP文件為GBK編碼時
mysql_query("SET NAMES 'gbk'", $conn);
// PHP文件為UTF-8編碼時
// mysql_query("SET NAMES 'utf8'", $conn);
?>

說明:@抑制錯誤輸出,die()終止腳本並顯示錯誤。SET NAMES等同於同時設置character_set_client、connection、results。

二、插入數據

1. SQL語法

-- 全列插入(須匹配表結構順序)
INSERT INTO table_name VALUES (v1, v2, ...);

-- 指定列插入(推薦,順序可調整,未指定列需有默認值或允許NULL)
INSERT INTO table_name (col1, col2, ...) VALUES (v1, v2, ...);

2. PHP完整示例

<?php
// 接收表單數據(假設POST提交)
$username = $_POST['username'];
$password = $_POST['password'];
$email    = $_POST['email'];

// 安全處理:密碼加密、轉義
$password = md5($password); // 實際項目請用password_hash()
$regdate  = time(); // Unix時間戳

// 構建SQL(字符值必須用單引號)
$sql = "INSERT INTO user (username, password, email, regdate) 
        VALUES ('$username', '$password', '$email', $regdate)";

// 調試技巧:打印SQL檢查
// exit($sql); 

if (!mysql_query($sql, $conn)) {
    echo '添加數據失敗:' . mysql_error();
} else {
    echo '添加數據成功!ID: ' . mysql_insert_id();
}
?>

3. 關鍵安全提示

  • 編碼轉換:執行mysql_query前必須SET NAMES,否則中文入庫亂碼
  • 密碼加密:MD5不可逆,驗證時對比加密後值。生產環境請用password_hash() + password_verify()
  • SQL注入防護:舊版mysql擴展無預處理,必須用mysql_real_escape_string()轉義輸入,或升級mysqli/PDO使用參數綁定
  • 調試開關:開發階段保留exit($sql),上線前註釋

三、查詢數據

1. SQL語法

-- 查詢指定列
SELECT col1, col2 FROM table_name [WHERE condition] [ORDER BY col] [LIMIT offset, rows];

-- 查詢所有列
SELECT * FROM table_name ...

2. PHP完整示例

<?php
$sql = "SELECT * FROM user";
$result = mysql_query($sql, $conn);

if (!$result) {
    die('查詢失敗:' . mysql_error());
}

// 設置輸出字符集(讀取時防亂碼)
mysql_query("SET CHARACTER SET 'gbk'", $conn); // 或 utf8

echo '<table border="1"><tr><th>用戶名</th><th>郵箱</th><th>注冊時間</th></tr>';

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    // MYSQL_ASSOC 返回關聯數組,可用列名訪問
    // MYSQL_NUM 返回數字索引數組
    // MYSQL_BOTH 兩者兼有(默認)
    echo '<tr>';
    echo '<td>' . htmlspecialchars($row['username']) . '</td>';
    echo '<td>' . htmlspecialchars($row['email']) . '</td>';
    echo '<td>' . date('Y-m-d', $row['regdate']) . '</td>';
    echo '</tr>';
}

echo '</table>';

// 釋放結果集內存(良好習慣)
mysql_free_result($result);

mysql_close($conn);
?>

3. 核心函數對比

函數返回值適用場景
mysql_fetch_array($res, MYSQL_ASSOC)關聯數組按列名訪問,代碼可讀性強
mysql_fetch_assoc($res)關聯數組mysql_fetch_array($res, MYSQL_ASSOC)簡寫
mysql_fetch_array($res, MYSQL_NUM)數字索引數組性能略高,需記住列順序
mysql_fetch_row($res)數字索引數組mysql_fetch_array($res, MYSQL_NUM)簡寫
mysql_fetch_object($res)對象面向對象風格訪問

四、完整表單處理流程圖

用戶瀏覽器 --(POST表單)--> PHP處理頁
    1. 接收 $_POST 數據
    2. 驗證、過濾、轉義
    3. 密碼加密、時間戳生成
    4. 構建參數化SQL (mysqli/PDO) 或 轉義SQL (mysql)
    5. 執行 INSERT
    6. 判斷結果,反饋用戶
    7. 關閉連接、釋放資源

五、遷移建議:拥抱mysqli/PDO

mysql擴展自PHP 5.5棄用,7.0移除。新項目請直接使用:

  • mysqli:面向過程/對象雙模式,支持預處理、事務、多查詢
  • PDO:數據庫抽象層,支持12種數據庫,預處理、異常處理更優雅
// PDO 插入示例
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("INSERT INTO user (username, password, email, regdate) VALUES (?, ?, ?, ?)");
$stmt->execute([$username, password_hash($password, PASSWORD_DEFAULT), $email, time()]);
echo "插入成功,ID: " . $pdo->lastInsertId();

掌握基礎CRUD後,重點學習預處理語句、事務控制、連接池、ORM框架,構建安全高效的數據訪問層。

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