產品列表需將特定商品(ifbold=1)沉底展示,其餘按更新時間倒序。SQL 初稿:
SELECT * FROM product_con WHERE $scl ORDER BY 'ifbold' ASC, $myord DESC LIMIT $pagelimit
ORDER BY 'ifbold' ASC **完全不生效**,所有行視為同一排序值。ORDER BY 'ifbold' ASC 也無效。| 寫法 | 語義 | 結果 |
|---|---|---|
ORDER BY 'ifbold' | 按**常量字符串** 'ifbold' 排序 | 所有行值相同 → 無排序效果 |
ORDER BY `ifbold` | 按**列名** ifbold 排序 | 正常按 0/1 分組排序 |
ORDER BY "ifbold" | 同單引號(SQL 模式下視為字符串) | 無效 |
SELECT * FROM product_con WHERE $scl ORDER BY `ifbold` ASC, $myord DESC LIMIT $pagelimit
`。? 占位符,杜絕拼接注入風險。ORDER BY、GROUP BY、WHERE 中的裸列名是否加反引號。SET SESSION sql_mode = 'ANSI_QUOTES'; SELECT * FROM t ORDER BY "column_name"; -- 雙引號變為標識符 SELECT "literal string"; -- 字符串必須用單引號
生產環境**不建議開啟 ANSI_QUOTES**,保持反引號為標準識別符,單雙引號專用於字符串,降低認知負擔。
單引號 = 字符串常量,反引號 = 標識符。ORDER BY 'col' 相當於 ORDER BY 'constant',全表視為同一排序鍵。**永遠用反引號包裹列名/表名**,養成肌肉記憶,避免在動態拼接 SQL 時踩坑。