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

PHP mysqli 預處理 Prepare 語句完整使用指南

     編輯:MySQL 資料庫相關知識

預處理核心價值

  • 性能:SQL 模板預編譯,重複執行無需再次解析優化
  • 安全:參數綁定徹底防 SQL 注入
  • 穩定:類型檢查減少運行時錯誤

場景一:綁定參數

<?php
$mysqli = new mysqli("localhost", "root", "", "volunteer");
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO `vol_msg`(mid, content) VALUES(?, ?)");
// 綁定類型:i=整數, s=字符串, d=雙精度, b=Blob
$stmt->bind_param("is", $id, $content);

$id = "";           // 自增主鍵傳空字符串或 0
$content = "這是插入的內容";
$stmt->execute();

echo "Row inserted: " . $stmt->affected_rows;

// 批量插入:重複賦值+execute,無需再次 prepare
$content = "第二條數據";
$stmt->execute();

$mysqli->close();
?>

場景二:綁定結果

<?php
$mysqli = new mysqli("localhost", "root", "", "volunteer");
mysqli_query($mysqli, "SET NAMES utf8");

$stmt = $mysqli->prepare("SELECT mid, content FROM `vol_msg`");
$stmt->execute();
$stmt->bind_result($id, $content);

while ($stmt->fetch()) {
    echo "第 {$id} 條: {$content}<br/>";
}

$mysqli->close();
?>

關鍵方法速查

方法用途
prepare()創建預處理語句對象
bind_param()綁定輸入參數(類型+變量引用)
bind_result()綁定輸出列到變量
execute()執行預處理語句
fetch()獲取下一行綁定結果
free_result()釋放結果集內存
close()關閉語句對象

類型代碼對照表

  • i - Integer (整數)
  • d - Double (浮點數)
  • s - String (字符串)
  • b - Blob (二進制數據,需分包發送)

最佳實踐

  1. 所有動態參數查詢強制使用預處理
  2. 批量操作時:prepare一次 → 循環bind_param+execute
  3. 及時 free_result() 和 close() 釋放資源
  4. 錯誤處理:檢查 $stmt->errno 和 $stmt->error
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved