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

SQL 中 %s 與 % 符號含義解析:佔位符 vs 萬用字元

     編輯:程式設計綜合問答

語句背景

UPDATE jl_front_order SET paystatus='1', payid='%s' WHERE oid='%s'

兩種語境下的含義

1. 純 SQL 字面字串(直接在資料庫工具執行)

  • % 是 LIKE 模式比對的萬用字元,代表「零個或多個任意字元」。
  • %s 只是普通字串 "%s",無特殊含義。
  • 上述語句會將 payid 設為字面字串 "%s",oid 比對字面字串 "%s"。

2. 程式語言參數化查詢 / 字串格式化(C、Python、Java、PHP 等)

  • %s 是 格式化佔位符,表示「此處將插入一個字串參數」。
  • 實際執行前,驅動程式或程式碼會將 %s 替換為對應變數值,並自動處理引號轉義、型別轉換。
  • 範例 (Python DB-API):
cursor.execute(
    "UPDATE jl_front_order SET paystatus='1', payid=%s WHERE oid=%s",
    (payid_value, oid_value)
)
-- 驅動程式自動產生:
-- UPDATE jl_front_order SET paystatus='1', payid='ABC123' WHERE oid='ORD001'

常見佔位符對照表

語言/驅動佔位符備註
C (printf/sprintf)%s, %d, %f字串格式化,非 SQL 專用
Python (DB-API / psycopg2 / pymysql)%s所有型別統一用 %s,驅動程式處理
Java (PreparedStatement)?JDBC 標準,索引從 1 開始
C# (ADO.NET)@param命名參數
PHP (PDO)? 或 :name支援兩種風格
Go (database/sql)$1, $2... (PostgreSQL) / ? (MySQL)視驅動而定

關鍵安全提醒

  • 絕不可 使用 sprintf、String.format、f-string 等字串拼接方式構建 SQL,極易導致 SQL 注入。
  • 務必使用參數化查詢 / PreparedStatement,由驅動程式負責參數綁定與轉義。
  • 若在 SQL 字面值中需搜尋實際的 % 或 _,請使用 ESCAPE 子句:WHERE col LIKE '%\%%' ESCAPE '\'。

總結

%s 在 SQL 字面值中無特殊含義;在程式碼構建 SQL 時為字串佔位符,代表參數綁定位置。理解語境差異,堅持參數化查詢,是防止 SQL 注入的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved