PHP 中單引號與雙引號的本質區別在於字串解析機制:
\\' 和 \\\\ 兩種轉義從效能角度,單引號避免了解析開銷,執行速度更快。
$abc = 'my name is tome'; echo $abc; // 輸出: my name is tome echo '$abc'; // 輸出: $abc echo "$abc"; // 輸出: my name is tome
雙引號支援變數插值,單引號視為字面量。
// 正確:單引號包裹 SQL 字串常量 $sql = "select * from abc_table where user_name='abc';";
// 字串變數
$user_name = $_REQUEST['user_name'];
$sql = "select * from abc_table where user_name = '" . $user_name . "';";
// 陣列變數
$user = array("name" => $_REQUEST['user_name'], "age" => $_REQUEST['age']);
$sql = "select * from abc_table where user_name = '" . $user["name"] . "';";
建議將 SQL 拆分為三部分,以點號串聯:
"select * from table where user_name = '" — 固定 SQL 片段$user — 動態變數值"'" — 結束引號這樣做既清晰又安全,避免雙引號內變數插值帶來的注入風險與可讀性問題。
magic_quotes_gpc,手動處理轉義