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

PHP 轉義 MySQL 語句:mysql_real_escape_string 正確用法

     編輯:PHP 綜合知識

為何需要轉義

使用者輸入含單引號、雙引號、反斜線等特殊字元,直接拼接 SQL 會導致語法錯誤或 SQL 注入 風險。

正確函數:mysql_real_escape_string

string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier = NULL ] )
  • 轉義字元:\x00, \n, \r, \\, ', ", \x1a。
  • 不轉義 % 與 _(LIKE 查詢通配符需自行處理)。
  • 需已建立資料庫連線,否則回傳 false 並產生 E_WARNING。
  • 僅轉義字串參數值,不可對整條 SQL 語句使用。

範例

<?php
$link = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('test', $link);

$item = "Zak's and Derick's Laptop";
$escaped = mysql_real_escape_string($item, $link);
// 輸出:Zak\'s and Derick\'s Laptop
printf("Escaped string: %s\n", $escaped);

// 正確用法:只轉義值
$name = mysql_real_escape_string($_POST['name'], $link);
$sql = "SELECT * FROM users WHERE name = '$name'";
mysql_query($sql, $link);

錯誤示範

// ❌ 錯誤:對整條 SQL 使用,會破壞語法
$sql = "SELECT * FROM users WHERE name = 'test'";
$bad = mysql_real_escape_string($sql); // 會轉義引號、空格等,導致 SQL 無效

現代替代方案:預處理語句

強烈建議改用 PDO 或 mysqli 預處理語句,徹底分離 SQL 結構與資料,免除手動轉義。

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare('SELECT * FROM users WHERE name = :name');
$stmt->execute(['name' => $name]); // 自動處理轉義與型別
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

總結

  • 舊專案維護:使用 mysql_real_escape_string 針對單一字串值轉義。
  • 新專案:全面採用預處理語句(PDO/mysqli),安全且效能更好。
  • 注意 %、_ 在 LIKE 查詢需額外轉義(str_replace(['%','_'], ['\\%','\\_'], $val))。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved