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

PHP 單引號與雙引號深度解析:定義、變數解析、效能與 SQL 實戰

     編輯:PHP 綜合知識

定義規則

  • 成對使用:'...' 或 "...",不可混用 '..."
  • 單引號字串內可直接包含雙引號,反之亦然
  • 需在字串內出現同類引號時,使用反斜線跳脫:"He said \"Hi\""

變數解析差異(核心)

情境雙引號單引號
變數插值"$var" → 解析值'$var' → 字面文字
跳脫序列\n \t \\ \$ 解析僅 \\ \' 解析
效能需解析,略慢無解析,略快

範例對比

$foo = 2;
echo "foo is $foo";   // foo is 2
echo 'foo is $foo';   // foo is $foo
echo "foo is $foo\n"; // foo is 2 + 換行
echo 'foo is $foo\n'; // foo is $foo\n(字面)

複雜變數語法

陣列、物件屬性在雙引號中需用大括號包裹:

echo "value = {$arr[$i][$j]}";     // 正確
echo "value = {$obj->prop->sub}";  // 正確
echo "value = {$func()}";          // PHP 7+ 支援函數呼叫

SQL 語句實戰

問題:單引號衝突

$sql = "INSERT INTO users (name) VALUES ('O'Reilly')"; // 語法錯誤

解決方案

  1. 跳脫單引號: VALUES ('O\'Reilly')
  2. addslashes(): $s = addslashes("O'Reilly"); VALUES ('$s')
  3. 參數化查詢(最佳): $stmt = $pdo->prepare("INSERT INTO users (name) VALUES (?)"); $stmt->execute(["O'Reilly"]);
  4. magic_quotes_gpc(已棄用): php.ini 開啟自動跳脫,不建議依賴

字串連接建議

// 複雜變數分離連接,可讀性佳
echo 'Value: ' . $arr[$i][$j] . ' - ' . $obj->name;

// 或使用雙引號 + 大括號
echo "Value: {$arr[$i][$j]} - {$obj->name}";

總結建議

  • 不需變數解析 → 單引號(效能微優、意圖明確)
  • 需變數插值、跳脫序列 → 雙引號
  • SQL 永遠使用參數化查詢,拒絕字串拼接
  • 現代 PHP 框架(Laravel、Yii、Symfony)皆內建 Query Builder/ORM,杜絕手寫 SQL 拼接
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved