首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 1064 語法錯誤實戰排查:漏掉一個右括號引發的血案

     編輯:MySQL 資料庫相關知識

錯誤現場

SQL: INSERT INTO uploader.uploader_users (username, password, email, reg_date)
VALUES ('sa', '40c76244e235aa23e73acb4a457f9748', 'sa@gmail.com', '1132236495'

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL Server version for the right syntax to use near '' at line 2
Errno: 1064

根因分析

VALUES 子句的左括號 ( 有對應,但右括號 ) 缺失,導致解析器在行尾遇到字串結束仍未閉合,拋出 1064。

修正前後對比

-- 錯誤代碼
$db->query("INSERT INTO uploader.uploader_users (username, password, email, reg_date)
VALUES ('$bloginfo[username]', '$bloginfo[password]', '$bloginfo[email]', '$bloginfo[regdate]'");

-- 正確代碼(補上右括號 + 雙引號閉合)
$db->query("INSERT INTO uploader.uploader_users (username, password, email, reg_date)
VALUES ('$bloginfo[username]', '$bloginfo[password]', '$bloginfo[email]', '$bloginfo[regdate]')");

同類高發錯誤清單

錯誤類型典型現象排查技巧
括號不匹配1064 near ')' 或行尾IDE 高亮配對、逐行縮排
引號不閉合/混用1064 near '...'、字串顏色異常統一單雙引號策略、轉義檢查
保留字未加反引號1064 near 'order', 'group', 'key'...所有識別符加 `
佔位符數量不匹配PreparedStatement 參數綁定報錯數 ? 與綁定變數
中文全形字符1064 不明字符編碼設定 UTF-8、檢查複製貼上

高效排查工作流

  1. 直接複製報錯 SQL 到客戶端執行(MySQL Workbench / DBeaver / CLI),錯誤位置一目了然。
  2. 使用 SHOW WARNINGS; 查看完整提示。
  3. 啟用 general_log 記錄實際執行的 SQL(僅除錯環境)。
  4. PHP 端:echo $sql; exit; 打印最終組裝語句。
  5. 採用參數化查詢(Prepared Statements),從根本杜絕拼接錯誤與 SQL 注入。

參數化查詢範例(PDO)

$stmt = $pdo->prepare("INSERT INTO uploader_users (username, password, email, reg_date) VALUES (?, ?, ?, ?)");
$stmt->execute([$username, $password, $email, $reg_date]);

總結

1064 多為手工拼接 SQL 導致的語法細節錯誤。養成「參數化查詢 + IDE 格式化 + 客戶端驗證」三步驟習慣,可消除 90% 此類問題。

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