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

PHP mysqli 預處理語句新增資料:防 SQL 注入的標準實作範例

     編輯:PHP 相關知識

⚠️ 原始代碼風險警示

原文直接拼接 $_POST 變數進 SQL 字串,極度危險,嚴禁用於生產環境。正確做法:**預處理語句 + 參數綁定**。

安全標準寫法 (mysqli 物件導向)

<?php
// db.php - 連線設定
$mysqli = new mysqli('localhost', 'username', 'password', 'databasename');
$mysqli->set_charset('utf8mb4');
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // 拋出例外

// insert_user.php
require 'db.php';

try {
    // 1. 準備 SQL,使用 ? 佔位符
    $sql = "INSERT INTO users (fname, lname, comments) VALUES (?, ?, ?)";
    $stmt = $mysqli->prepare($sql);

    // 2. 綁定參數:'sss' 表示三個字串
    $stmt->bind_param('sss', 
        $_POST['fname'] ?? '', 
        $_POST['lname'] ?? '', 
        $_POST['comments'] ?? ''
    );

    // 3. 執行
    $stmt->execute();

    echo "✅ 用戶資料新增成功,ID: {$mysqli->insert_id}";
    
    $stmt->close();
} catch (mysqli_sql_exception $e) {
    error_log("Insert Error: {$e->getMessage()}");
    echo "❌ 新增失敗,請稍後再試";
} finally {
    $mysqli->close();
}

參數類型對照表

批次新增 (效能優化)

<?php
$users = [
    ['John', 'Doe', 'Comment 1'],
    ['Jane', 'Smith', 'Comment 2'],
    ['Bob', 'Wilson', 'Comment 3'],
];

$sql = "INSERT INTO users (fname, lname, comments) VALUES (?, ?, ?)";
$stmt = $mysqli->prepare($sql);

$mysqli->begin_transaction();
foreach ($users as $u) {
    $stmt->bind_param('sss', $u[0], $u[1], $u[2]);
    $stmt->execute();
}
$mysqli->commit();
echo "批次新增 " . count($users) . " 筆完成";
$stmt->close();

PDO 版本 (同樣安全,支援命名參數)

<?php
$pdo = new PDO('mysql:host=localhost;dbname=databasename;charset=utf8mb4', 'username', 'password', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);

$sql = "INSERT INTO users (fname, lname, comments) VALUES (:fname, :lname, :comments)";
$stmt = $pdo->prepare($sql);
$stmt->execute([
    ':fname'    => $_POST['fname'] ?? '',
    ':lname'    => $_POST['lname'] ?? '',
    ':comments' => $_POST['comments'] ?? '',
]);
echo "新增成功,ID: {$pdo->lastInsertId()}";
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型字元對應 PHP 類型範例
iinteger123, (int)$_POST['age']
ddouble (float)12.34, (float)$_POST['price']
sstring'text', $_POST['name']
bblob (二進位)$fileContent