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

PHP 表單提交至 MySQL 完整實作:環境配置、連線類、防注入實務

     編輯:PHP 相關知識

從 PHP 環境啟用 MySQL 擴展,到建立資料庫連線類、處理表單 POST 資料、防範 SQL 注入,本文提供一份可直接落地的完整實作指南。

一、PHP 啟用 MySQL 擴展 (Windows)

  1. 複製 php_mysql.dll、libmysql.dll 到 C:\Windows\System32\
  2. 編輯 php.ini,取消註解:
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
  1. 重啟 Apache

二、資料庫連線類

<?php
// conn.php
class DB {
    private static $instance = null;
    public $link;

    private function __construct() {
        $this->link = new mysqli("localhost", "root", "159357", "db_test");
        if ($this->link->connect_errno) {
            die("連線失敗: " . $this->link->connect_error);
        }
        $this->link->set_charset("utf8");
    }

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}
?>

三、表單頁面

<!-- login.php -->
<form action="add.php" method="post">
  用戶名: <input type="text" name="username" required><br>
  Email: <input type="email" name="email" required><br>
  <input type="submit" name="submit" value="提交">
</form>

四、處理提交並防注入

<?php
// add.php
require_once 'conn.php';
$db = DB::getInstance()->link;

if (isset($_POST['submit'])) {
    // 使用預處理防注入
    $stmt = $db->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
    $stmt->bind_param("ss", $_POST['username'], $_POST['email']);
    if ($stmt->execute()) {
        echo "新增成功,ID: " . $stmt->insert_id;
    } else {
        echo "錯誤: " . $stmt->error;
    }
    $stmt->close();
}
?>

五、關鍵安全提醒

錯誤寫法風險正確寫法
VALUES ('$_POST[username]')SQL 注入預處理 bind_param
直接用 $_POST 未過濾XSS、資料汙染htmlspecialchars() 輸出時轉義
無 CSRF 保護跨站請求偽造表單加入 Token 驗證

六、進階建議

  • 改用 PDO(支援多資料庫、異常處理更完善)
  • 引入驗證庫(如 Respect/Validation)
  • 使用 ORM(Eloquent、Doctrine)提升開發效率
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved