FiveM MySQL Error 1064 SQL Syntax Error แก้ยังไง? ตรวจ Query, Quote, Comma และ Resource ให้ถูกจุด
ปัญหา FiveM MySQL Error 1064 หรือ SQL Syntax Error เกิดเมื่อ MySQL/MariaDB อ่านคำสั่ง SQL ที่ Resource ส่งมาแล้วพบว่าโครงสร้างคำสั่งไม่ถูกต้อง ทำให้ Query ไม่สามารถทำงานต่อได้
ตัวอย่างข้อความที่มักพบ:
ERROR 1064 (42000): You have an error in your SQL syntax
หรือ:
ER_PARSE_ERROR
หรือ:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version
ใน FiveM ปัญหานี้มักเกิดหลัง:
ติดตั้ง Resource ใหม่
แก้ Query เอง
Update Script
เปลี่ยน Framework
Import SQL
Migration Database
เปลี่ยน MySQL/MariaDB Version
แก้ Table หรือ Column Name
Copy SQL จาก Tutorial เก่า
สิ่งสำคัญคือ Error 1064 ไม่ได้หมายความว่า Database เสีย แต่หมายความว่า SQL Statement ที่ Database กำลังพยายามอ่านมี Syntax ที่ไม่ถูกต้องในตำแหน่งหนึ่ง
แนวทางแก้ที่ถูกต้องคือ:
อ่านข้อความ Error ให้ครบ → ดูข้อความหลังคำว่า near → หา Resource → หา Query → ตรวจ Syntax → ทดสอบ Query → แก้เฉพาะต้นเหตุ
① FiveM MySQL Error 1064 คืออะไร
Error 1064 เป็น SQL Syntax Error
หมายถึง Database Parser ไม่สามารถตีความ Query ตามไวยากรณ์ SQL ที่รองรับได้
② ตัวอย่าง Error
You have an error in your SQL syntax near 'FROM players'
คำว่า:
near 'FROM players'
มีประโยชน์มากในการหา Position ที่ Query เริ่มผิด
③ Error 1064 เป็น Connection Error ไหม
ไม่
ถ้า Database ส่ง Syntax Error กลับมาได้ แสดงว่า:
FiveM ติดต่อ Database ได้แล้ว
Authentication ผ่านแล้ว
Query ถูกส่งถึง Database แล้ว
ปัญหาอยู่ที่ SQL Statement
④ จึงไม่ต้องเริ่มจากเปลี่ยน Password
ถ้า Error เป็น 1064:
Password ไม่ใช่จุดแรกที่ควรแก้
⑤ ไม่ต้องเปิด Port ใหม่
Connection ผ่านไปถึง Database แล้ว
⑥ ไม่ต้อง Clear FiveM Cache เป็นอันดับแรก
เพราะ Error เกิดจาก SQL ฝั่ง Server
⑦ ไม่ต้อง Reinstall GTA V
ไม่เกี่ยวกับ SQL Syntax ของ FiveM Server
⑧ สาเหตุที่พบบ่อยที่สุดคือ Query พิมพ์ผิด
เช่น:
SELEC * FROM players;
แทน:
SELECT * FROM players;
⑨ SQL Keyword ต้องถูกต้อง
ตัวอย่างคำที่พบบ่อย:
SELECT
INSERT
UPDATE
DELETE
FROM
WHERE
VALUES
SET
JOIN
ORDER BY
GROUP BY
พิมพ์ผิดเพียงหนึ่งตัว Query อาจ Error ได้
⑩ Missing Comma คืออะไร
ตัวอย่างผิด:
SELECT firstname lastname FROM players;
ถ้าตั้งใจเลือกสอง Columns ควรมี Comma:
SELECT firstname, lastname FROM players;
⑪ Comma เกินก็ Error ได้
เช่น:
SELECT firstname, lastname, FROM players;
Comma ก่อน FROM อาจทำให้ Syntax ผิด
⑫ INSERT มักพลาด Comma
ตัวอย่าง:
INSERT INTO players (firstname, lastname)
VALUES ('John' 'Smith');
ขาด Comma ระหว่าง Values
⑬ รูปแบบที่ถูกต้อง
INSERT INTO players (firstname, lastname)
VALUES ('John', 'Smith');
⑭ จำนวน Columns กับ Values ควรสัมพันธ์กัน
เช่น:
INSERT INTO players (firstname, lastname)
VALUES ('John');
แม้ Error ที่ได้อาจไม่ใช่ 1064 เสมอไป แต่ Query Logic ยังผิด
⑮ Missing Quote เป็นอีกสาเหตุยอดนิยม
ผิด:
SELECT * FROM players
WHERE firstname = 'John;
Quote เปิดแต่ไม่ปิด
⑯ รูปแบบถูก
SELECT * FROM players
WHERE firstname = 'John';
⑰ Quote แบบไหนใช้กับ String
SQL โดยทั่วไปใช้:
'ข้อความ'
สำหรับ String Literal
⑱ Backtick คืออะไร
Backtick:
`
มักใช้ครอบ Identifier เช่น:
SELECT `name` FROM `players`;
⑲ Quote กับ Backtick ไม่ใช่สิ่งเดียวกัน
ตัวอย่าง:
'John'
เป็น String Value
ส่วน:
`name`
เป็น Identifier
⑳ ใช้ผิดอาจทำ Query ผิดหรือได้ผลไม่ตรงที่ตั้งใจ
จึงควรแยกให้ชัด
㉑ Reserved Word คืออะไร
บางคำเป็น Keyword ของ SQL
ถ้านำมาใช้เป็น Column Name อาจเกิดปัญหา
ตัวอย่างเช่น Column ชื่อ:
order
หรือคำอื่นที่ชนกับ Syntax ของ SQL
㉒ ใช้ Backtick ช่วยได้ในบางกรณี
เช่น:
SELECT `order` FROM orders;
แต่แนวทางที่ดีกว่าคือออกแบบชื่อ Columns ไม่ให้ชน Reserved Words ตั้งแต่ต้น ถ้าแก้ Schema ได้
㉓ Error หลังเพิ่ม Column ใหม่
อาจไม่ได้เกิดจาก Column ไม่มี
แต่อาจเกิดจาก Query ที่แก้เพื่อใช้ Column ใหม่มี Syntax ผิด
㉔ Error 1054 ต่างจาก 1064
1054
Unknown Column
1064
SQL Syntax ผิด
เป็นคนละปัญหา
㉕ Error 1146 ต่างจาก 1064
1146
Table Doesn't Exist
1064
Database อ่าน Syntax ไม่ผ่าน
㉖ Error Message หลังคำว่า near
เป็นจุดสำคัญที่สุดจุดหนึ่ง
ตัวอย่าง:
... syntax to use near 'WHERE citizenid = ?'
ให้ดูส่วนก่อน WHERE ด้วย เพราะความผิดพลาดอาจเกิดก่อนหน้าตำแหน่งที่ Database แจ้งเล็กน้อย
㉗ อย่าดูเฉพาะคำหลัง near
Parser มักหยุดเมื่อเจอจุดที่อ่านต่อไม่ได้
แต่ต้นเหตุอาจอยู่ก่อนหน้านั้น
㉘ ตัวอย่าง
ผิด:
UPDATE players
SET firstname = 'John',
WHERE id = 1;
Error อาจชี้ใกล้:
WHERE
แต่ต้นเหตุคือ Comma เกินหลัง 'John'
㉙ UPDATE Syntax ที่ถูก
UPDATE players
SET firstname = 'John'
WHERE id = 1;
㉚ UPDATE หลาย Column
UPDATE players
SET firstname = 'John',
lastname = 'Smith'
WHERE id = 1;
㉛ Comma ใน SET ต้องอยู่ระหว่าง Fields
ไม่ควรมีหลัง Field สุดท้ายก่อน WHERE
㉜ DELETE Query ก็พลาดได้
ผิด:
DELETE players WHERE id = 1;
รูปแบบทั่วไปคือ:
DELETE FROM players
WHERE id = 1;
㉝ ระวัง DELETE มากเป็นพิเศษ
เพราะ Syntax ที่ถูกแต่ไม่มี WHERE อาจลบข้อมูลจำนวนมากได้
㉞ SQL Syntax ถูกไม่ได้แปลว่า Query ปลอดภัย
ตัวอย่าง:
DELETE FROM players;
Syntax ถูก
แต่ลบทุก Row
㉟ อย่าทดสอบ DELETE บน Production แบบสุ่ม
ใช้ Database สำรองหรือเปลี่ยนเป็น SELECT เพื่อตรวจ Scope ก่อน
㊱ WHERE Clause คืออะไร
ใช้กำหนดว่า Query จะกระทบ Row ไหน
เช่น:
WHERE citizenid = ?
㊲ Missing WHERE ไม่จำเป็นต้องเกิด 1064
บาง Query ยังถูก Syntax แต่ผลอันตรายมากกว่า Error
㊳ SQL Editor สามารถช่วยตรวจ Syntax ได้ไหม
ได้ในระดับหนึ่ง
แต่ต้องใช้ Database Version และ Schema ที่ใกล้กับ Production
㊴ phpMyAdmin ใช้ทดสอบ Query ได้ไหม
ได้ แต่ควรระวัง Query ที่เปลี่ยนข้อมูล
㊵ SELECT เป็น Query ที่ปลอดภัยกว่าสำหรับ Debug
เพราะเน้นอ่านข้อมูล
㊶ ก่อน UPDATE ลอง SELECT เงื่อนไขเดียวกัน
ตัวอย่าง:
SELECT *
FROM players
WHERE id = 123;
ตรวจว่าคุณกำลังเล็ง Row ที่ถูกต้องก่อน
㊷ ก่อน DELETE ยิ่งควร SELECT
ลดความเสี่ยงลบผิด
㊸ Error หลัง Copy SQL จากเว็บไซต์
อาจเกิดจาก:
Quote ถูกเปลี่ยน
Character แปลก ๆ
Syntax คนละ Database
Tutorial คนละ Version
㊹ Smart Quotes คืออะไร
บาง Editor เปลี่ยน:
'
เป็น:
‘ ’
ซึ่งไม่ใช่ ASCII Quote เดียวกัน
㊺ อย่าใช้ Smart Quotes ใน SQL
ใช้ Quote มาตรฐานจาก Code Editor
㊻ Copy จาก Word หรือเว็บอาจมี Invisible Characters
ทำให้ Query ดูเหมือนถูกแต่ Parser อ่านผิดได้
㊼ ใช้ Code Editor ช่วย
เช่น Editor ที่แสดง:
Syntax Highlighting
Line Numbers
จะ Debug ง่ายกว่า
㊽ Error หลังแก้ server.lua
หา Query ที่แก้ล่าสุดก่อน
㊾ Error หลังแก้ JavaScript Resource
ค้น:
SELECT
INSERT
UPDATE
DELETE
บริเวณ Code ที่แก้
㊿ Error หลังแก้ TypeScript
อาจเกิดจาก Query String ที่ Build ออกมาไม่ถูก
51. Lua Multiline String ต้องระวังไหม
ต้องระวังการประกอบ Query และ Quotes
52. JavaScript Template Literal ก็ต้องระวัง
เช่น Backtick ของ JavaScript กับ Backtick ใน SQL อาจทำให้ Code อ่านยาก
53. วิธีที่ปลอดภัยกว่าคือ Parameterized Query
แทนการต่อ User Input ลง SQL String โดยตรง
54. ตัวอย่างแนวคิด
ควรใช้:
SELECT * FROM players
WHERE citizenid = ?
แล้วส่ง Parameter แยก
55. ไม่ควรต่อ String แบบนี้
"SELECT * FROM players WHERE citizenid = '" + id + "'"
เพราะ:
Quote พังง่าย
เสี่ยง SQL Injection
Debug ยาก
56. Parameterized Query แก้ Syntax ทุกอย่างไหม
ไม่
ถ้า Query Structure ผิด:
SELEC * FROM players WHERE citizenid = ?
ก็ยัง Error 1064
57. แต่ช่วยเรื่อง Values
เพราะ Driver จัดการ Parameter แยกจาก SQL Structure
58. Apostrophe ในชื่อ Character มีผลไหม
เช่น:
O'Connor
หากต่อ String SQL เองแบบผิดวิธี Quote อาจพัง
59. Parameterized Query ช่วยได้มาก
เพราะไม่ควร Escape User Input ด้วยการต่อ String เองแบบสุ่ม
60. SQL Injection คืออะไร
การที่ Input ถูกนำไปเปลี่ยนความหมายของ Query
สำหรับ FiveM Developer ควรใช้:
Parameters
Server-side validation
เป็นพื้นฐาน
61. Error 1064 อาจเกิดตอน SQL Injection Attempt ได้ไหม
ได้ถ้า Input ทำ Query ที่ต่อ String พัง
แต่ไม่ควรมองทุก Syntax Error ว่าเป็นการโจมตี
ส่วนใหญ่ยังอาจเป็น Bug ของ Resource เอง
62. Server-side Validation สำคัญ
ควรตรวจ:
Type
Length
Allowed Values
ก่อน Query
63. Dynamic Column Name ต้องระวัง
Parameterized Query ส่วนมากใช้ Parameter สำหรับ Values
ไม่ใช่ Identifier เช่น Table/Column Name แบบเดียวกันเสมอไป
64. อย่าเอา Player Input ไปเป็น Table Name โดยตรง
เป็นทั้ง Syntax และ Security Risk
65. Dynamic ORDER BY ก็ต้อง Validate
ถ้า Resource ให้ Client กำหนด:
sort column
ต้อง Whitelist ค่าที่อนุญาต
66. Resource ที่สร้าง SQL แบบ Dynamic ซับซ้อนขึ้น
ยิ่งมี:
Optional filters
Dynamic columns
ยิ่งต้อง Test หลายกรณี
67. Error เฉพาะบาง Input
บอกใบ้ว่า Query Builder หรือ Value Handling มีปัญหา
68. Error ทุกครั้งที่ Resource Start
อาจเป็น Static Query ที่ผิด Syntax
69. Error เฉพาะ Player หนึ่ง
อาจ Input ของ Player นั้น Trigger Query Path ที่ผิด
70. Error เฉพาะบาง Job
Resource อาจสร้าง Query แยกตาม Job
71. Error ตอนซื้อรถ
ตรวจ Vehicle Purchase Query
72. Error ตอนซื้อบ้าน
ตรวจ Housing Insert/Update Query
73. Error ตอนส่งบิล
ตรวจ Billing Query
74. Error ตอน Save Inventory
ตรวจ Inventory Save Query
75. Error ตอน Character Login
ตรวจ:
SELECT Player
UPDATE last_login
76. Error ตอน Character Creation
ตรวจ INSERT INTO เป็นหลัก
77. Error ตอน Disconnect
ตรวจ Save Queries
78. Error ตอน Server Stop
Resource บางตัว Save Cache ตอน Shutdown
79. Error หลังเพิ่ม Feature ใหม่
โฟกัส Query ที่เกี่ยวกับ Feature นั้นก่อน
80. Error หลัง Update Resource
อาจเกิดจาก Resource ใหม่ใช้ Syntax ที่ Database Version ปัจจุบันไม่รองรับ หรือไฟล์ Resource/Migration ไม่ตรงกัน
81. SQL Dialect คืออะไร
MySQL และ MariaDB มี Syntax ร่วมกันจำนวนมาก แต่ไม่ควรถือว่าเหมือนกันทุก Feature และทุก Version
82. Query จาก PostgreSQL ใช้กับ MariaDB ได้ไหม
ไม่ควรคาดหวังว่าจะใช้ตรง ๆ ได้
SQL แต่ละระบบมี Dialect แตกต่างกัน
83. Query จาก SQLite ก็เช่นกัน
Syntax บางส่วนต่าง
84. Resource FiveM ต้องใช้ Database ที่ Developer รองรับ
ถ้า Resource ออกแบบสำหรับ MySQL/MariaDB ควรใช้ Environment ที่เข้ากันได้
85. Migration SQL จาก Database คนละชนิดอาจพัง
เช่น Syntax:
Auto increment
JSON
Upsert
อาจแตกต่าง
86. Error 1064 หลัง Import SQL
ตรวจว่า SQL File ทำมาสำหรับ:
MySQL
MariaDB
หรือระบบอื่น
87. DELIMITER คืออะไร
Stored Procedures/Triggers บาง SQL Dump อาจใช้ DELIMITER
แต่ FiveM Resource ทั่วไปจำนวนมากไม่ต้องใช้ระดับนี้
88. Import Tool บางตัว Handle DELIMITER ต่างกัน
หาก Error เกิดใน Trigger/Procedure ให้ตรวจ Tool และ SQL File ตาม Resource
89. Semicolon ขาดทำ Error ได้ไหม
ขึ้นอยู่กับ Tool/Context
ใน SQL Script หลาย Statements ต้องมี Separator ที่ถูกต้อง
90. Semicolon เกินทำ Error ไหม
Semicolon ว่าง ๆ บาง Context อาจไม่เป็นปัญหา แต่ไม่ควรเขียนมั่ว
91. SQL File มีหลาย Statements
ต้องแยกคำสั่งให้ถูก
92. Missing Parenthesis
ผิด:
INSERT INTO players (firstname, lastname
VALUES ('John', 'Smith');
ขาด:
)
93. Parenthesis เกินก็ Error
ตรวจคู่:
()
ให้ครบ
94. CREATE TABLE เป็นจุดที่พลาดง่าย
เพราะมี:
Column Definitions
Commas
Keys
Constraints
จำนวนมาก
95. ตัวอย่าง CREATE TABLE ผิด
CREATE TABLE example (
id INT,
name VARCHAR(50),
);
Comma หลัง Column สุดท้ายอาจทำให้ Syntax Error
96. ตัวอย่างถูก
CREATE TABLE example (
id INT,
name VARCHAR(50)
);
97. ALTER TABLE ก็พลาดได้
โดยเฉพาะ Migration ที่เพิ่มหลาย Columns
98. ตัวอย่างแนวคิด
ALTER TABLE players
ADD COLUMN last_login DATETIME;
ต้องใช้ Syntax ที่ Database รองรับ
99. Error 1064 หลังรัน Migration
อย่ารัน Migration ต่อไปทันที
เพราะอาจเกิด Partial Migration
100. Partial Migration คืออะไร
บาง Statements สำเร็จ
บาง Statement Error
Database จึงอยู่ในสภาพครึ่งเก่าครึ่งใหม่
101. ต้องตรวจ Schema หลัง Error
ดูว่า:
Table
Columns
ใดถูกสร้างแล้ว
102. อย่ารัน SQL ทั้งไฟล์ซ้ำโดยไม่ตรวจ
เพราะส่วนที่สำเร็จไปแล้วอาจเกิด:
Duplicate Column
Duplicate Key
ในรอบถัดไป
103. Error 1064 สามารถกลายเป็น Error 1060 รอบสองได้
ถ้า Migration บางส่วนผ่านแล้ว
104. Backup ก่อน Migration
สำคัญมาก
105. Resource SQL Install อาจมี Syntax ผิดเพราะไฟล์เสีย
ถ้า Download ไม่ครบหรือถูกแก้
ใช้ Package ต้นฉบับที่ถูกต้อง
106. Resource Leak/Pirated Script เสี่ยงกว่า
ไฟล์อาจ:
ถูกแก้
SQL ไม่ครบ
Version ไม่ตรง
ทำให้ Debug ยาก
107. ใช้ Resource จากแหล่งที่เชื่อถือได้
ช่วยลดปัญหา:
Missing migrations
Modified code
Old SQL
108. Error หลัง Custom Translate Resource
บางครั้งผู้แก้ Resource อาจไปเปลี่ยน SQL String โดยไม่ตั้งใจ
109. อย่า Translate SQL Keywords
เช่น:
SELECT
WHERE
FROM
ต้องคงเป็น SQL Syntax
110. แปลเฉพาะ UI/Text
ไม่ควรแก้คำที่เป็น Code
111. Search and Replace อาจทำ Query พัง
เช่น Replaceคำว่า:
name
ทั้ง Project
อาจเปลี่ยน:
Column Names
Variables
SQL
โดยไม่ตั้งใจ
112. หลัง Bulk Replace ควร Diff Code
ดูว่า SQLถูกเปลี่ยนหรือไม่
113. Git มีประโยชน์มาก
ช่วยเห็นว่า Query เปลี่ยนจากอะไรเป็นอะไร
114. Error เกิดหลัง Update Custom Code
ใช้ Git Diff หา Query ที่เปลี่ยนล่าสุด
115. Syntax Highlighting ช่วยเห็น Quote ไม่ครบ
โดยเฉพาะ String SQL ยาว ๆ
116. อย่าเขียน Query ยาวหนึ่งบรรทัดถ้าอ่านยาก
จัด Format เช่น:
SELECT
firstname,
lastname
FROM players
WHERE citizenid = ?;
อ่านง่ายกว่า
117. Formatting ไม่เปลี่ยน Logic
แต่ช่วย Debug
118. SQL Formatter ใช้ได้ไหม
ใช้ได้สำหรับ Query ที่ไม่มีข้อมูล Sensitive
แต่ Server Production Data ไม่ควรถูกส่งไปเว็บไซต์ภายนอกโดยไม่จำเป็น
119. Local Tools ปลอดภัยกว่า
สำหรับ Query/Schema ที่มีข้อมูลสำคัญ
120. Error Line Number ใน SQL File
Import Tools บางตัวอาจบอก:
Line
Statement
ช่วยหา Syntaxผิด
121. FiveM Console อาจบอก Query เต็ม
ถ้า Database Resource Log Errorไว้
122. Query เต็มคือข้อมูลสำคัญมาก
Copy Queryไปตรวจใน Test Databaseได้
โดยเปลี่ยน Parametersอย่างปลอดภัย
123. อย่าทดสอบ Production Mutation Query ตรง ๆ
ถ้าเป็น:
INSERT
UPDATE
DELETE
ใช้ Backup/Test Database
124. SELECT Query ทดสอบง่ายกว่า
ถ้า Errorอยู่ใน SELECT
สามารถทดลองโดยไม่เปลี่ยน Data
125. Resource Name จาก Console
เช่น:
@my-resource/server.lua
บอกว่า Bugอาจอยู่ Resourceใด
126. Line Number จาก Stack
เช่น:
server.lua:87
เปิด Codeจุดนั้น
127. Error Query มาจาก Dependency ได้ไหม
ได้
Resource A เรียก Functionของ Resource B
Database Errorอาจเกิดใน B
128. Stack Trace ช่วยดู Chain
อย่าดูแค่ชื่อ Resourceแรก
129. Framework Callback อาจเรียก Query
เช่น:
ESX
QBCore
Custom Framework
แต่ Errorยังต้องตรวจ SQLจริง
130. oxmysql เป็นคนสร้าง Syntax Errorไหม
โดยทั่วไป oxmysql ส่ง Queryของ Resourceไป Database
Root Causeมักอยู่ใน Queryที่ Resourceสร้าง
แต่ Version/Compatibilityก็ต้องตรวจเมื่อมีเหตุผล
131. mysql-async ก็เช่นกัน
Database Wrapperแสดง Error ไม่ได้หมายความว่า Wrapperเขียน Queryนั้น
132. Error Message อาจขึ้นชื่อ oxmysql
แต่ Resourceต้นทางอาจเป็น:
Garage
Phone
Housing
133. อ่าน Resource Stack
หา Caller
134. Placeholder คืออะไร
เช่น:
?
ใน Parameterized Query
135. จำนวน Placeholders ต้องตรง Parameters
หากไม่ตรง Driverอาจแจ้ง Errorอีกแบบ
แต่เป็นสิ่งที่ควรตรวจ
136. Named Parameters มีไหม
บาง Libraries/Versionsรองรับรูปแบบเฉพาะ
ให้ใช้ Syntaxตาม Database Resource Documentation
137. อย่าผสม Placeholder Syntax จาก Libraryอื่น
เช่น Copy Queryจาก Resourceที่ใช้ APIคนละแบบ
138. Resource Conversion mysql-async → oxmysql
อาจต้องแก้:
Calls
Parameters
Return Handling
ไม่ใช่แค่เปลี่ยนชื่อ Dependency
139. Query Syntaxบางส่วนอาจยังเหมือน
แต่ API Wrapperต่างกัน
140. Error 1064 หลัง Convert Database Library
ตรวจ Queryที่ถูกประกอบจริง
141. LIMIT Syntax พลาดได้
เช่น Dynamic Limitที่เป็น Empty String
Queryอาจกลายเป็น:
SELECT * FROM players LIMIT
แล้ว Syntax Error
142. Dynamic WHERE พลาดได้
เช่นไม่มี Conditions แต่ Codeสร้าง:
SELECT * FROM players WHERE
Queryไม่สมบูรณ์
143. Query Builder ต้อง Handle Empty Conditions
ถ้า Filterไม่มี:
อย่าใส่
WHEREเปล่า
144. Dynamic AND พลาดได้
เช่น:
SELECT * FROM players
WHERE AND job = 'police';
ผิด Syntax
145. Trailing AND
WHERE job = 'police' AND
ก็ผิด
146. Dynamic OR ก็เหมือนกัน
ต้องประกอบ Conditionsให้ถูก
147. Empty IN Clause
บาง Codeอาจสร้าง:
WHERE id IN ()
ซึ่งอาจมี Syntax/Behaviorไม่เหมาะตาม Database
148. ต้อง Handle Empty Array ก่อน Query
Developerควร Returnผลที่เหมาะสมแทนสร้าง SQLผิด
149. ORDER BY Dynamic Field
ถ้า Fieldว่าง:
ORDER BY
จะ Error
150. GROUP BY ก็เช่นกัน
Dynamic Queryต้อง Test Empty State
151. LIMIT Offsetผิด
เช่น:
LIMIT , 10
อาจ Error
152. Paging Resourceควร Validateเลข
Page
Limit
Offset
153. Numbersไม่ควรถูกส่งเป็น SQL Fragmentจาก Clientโดยตรง
Validateบน Server
154. Negative/Invalid Valuesอาจไม่ใช่ 1064เสมอไป
แต่ควร Validation
155. Column Alias คืออะไร
เช่น:
SELECT firstname AS name
FROM players;
156. Alias Syntax ผิดก็ Error
โดยเฉพาะถ้า Aliasชน Keyword
157. JOIN คืออะไร
เชื่อมข้อมูลหลาย Tables
Query JOIN ยาวมีโอกาส Syntaxผิดมากขึ้น
158. ตัวอย่าง JOINพื้นฐาน
SELECT p.id, v.plate
FROM players p
JOIN vehicles v ON v.owner = p.id;
159. Missing ON ใน JOIN บางรูปแบบ
อาจทำ Queryไม่ตรงที่ต้องการหรือ Errorตาม Syntaxที่ใช้
160. Ambiguous Column ต่างจาก Syntax Error
หากสอง Tablesมี Columnชื่อเดียวกันและ Queryไม่ระบุ Table อาจเกิด Errorคนละประเภท
161. ใช้ Aliasช่วยความชัดเจน
เช่น:
p.id
v.id
162. Subquery คืออะไร
Queryซ้อนใน Query
ยิ่งซับซ้อนยิ่งควร Formatให้ชัด
163. Parenthesesใน Subqueryสำคัญมาก
ขาดหนึ่งตัวอาจ 1064
164. CASE Syntaxก็พลาดง่าย
Custom Scriptsที่ใช้ Complex SQLควร Testใน Database Clientก่อน Deploy
165. CASE ต้องมี Structureครบ
เช่น:
CASE
WHEN ...
THEN ...
ELSE ...
END
166. END หายสามารถทำ Syntax Error
167. UNION Syntaxต้อง Columnเข้ากัน
แม้บางปัญหาอาจเป็น Errorชนิดอื่น
168. CTE คืออะไร
SQLรุ่นใหม่มี Featureเช่น Common Table Expressions
แต่ Version Compatibilityสำคัญ
169. Queryใช้ Featureใหม่กับ Databaseเก่า
อาจขึ้น Syntax Error
แม้ Queryถูกสำหรับ Versionใหม่
170. นี่คือเหตุผลที่ Error Messageพูดถึง Server Version
เพราะ Syntax Supportอาจขึ้นกับ Version
171. อย่ารีบแก้ Queryที่ดูถูก
ก่อนตรวจว่า Database Versionรองรับ Featureนั้นหรือไม่
172. Resource Requirements สำคัญ
Developerอาจกำหนด Minimum:
MySQL Version
MariaDB Version
ควรทำตาม
173. Downgrade Queryอาจเป็นทางเลือกใน Custom Development
แต่ถ้า Third-party Resourceควร Update Database/Resourceตาม Supported Stack มากกว่า Patchสุ่ม
174. Errorหลังเปลี่ยนจาก MySQL เป็น MariaDB
ตรวจ Compatibilityของ Queryที่ใช้
175. Errorหลังเปลี่ยนจาก MariaDB เป็น MySQL
เช่นเดียวกัน
176. SQL Mode ทำให้ 1064 ไหม
บาง Syntax/Behaviorอาจได้รับอิทธิพลจาก SQL Mode
แต่ Error 1064ส่วนใหญ่ควรเริ่มจาก Query Syntaxจริง
177. ANSI_QUOTES คืออะไรในแนวคิด
SQL Modeบางแบบเปลี่ยนความหมายของ Double Quotes
จึงอาจทำให้ Queryที่พึ่ง Quote Styleบางอย่างมี Behaviorต่าง
178. อย่าเปลี่ยน SQL Modeเพื่อแก้ Syntaxแบบเดา
ดู Queryก่อน
179. Double Quote สำหรับ Stringควรระวัง
ใช้ Single Quoteสำหรับ Stringตามแนวปฏิบัติทั่วไปจะชัดเจนกว่า
180. SQL Mode Environment ต่างกัน
ทำให้ Devผ่าน แต่ Production Errorได้
181. ProductionกับDevควรใกล้กัน
Database Engine
Version
SQL Mode
ช่วยลด Surprise
182. Error 1064เฉพาะ Production
ตรวจ Environment Difference
183. Error 1064เฉพาะ Localhost
อาจ Local Database Versionแตกต่าง
184. SQL Version Check
Server Ownerควรรู้ว่าใช้:
MySQL
MariaDB
Versionใด
ก่อน Debug Compatibility
185. Resource READMEอาจระบุ Compatibility
ควรอ่านก่อนติดตั้ง
186. Errorหลัง Import SQLจาก Resourceคนละ Version
SQL Fileใหม่กับ Codeเก่าหรือกลับกันอาจสร้างปัญหา
187. Version Pair สำคัญ
Code Version + Schema Version
ควรตรงกัน
188. Errorใน CREATE INDEX
Migrationอาจใช้ Syntaxที่ Versionปัจจุบันไม่รองรับ
189. อย่าข้าม Migrationบรรทัดที่ Errorแล้วทำต่อโดยไม่รู้ผล
Schemaอาจไม่ครบ
190. Error 1064ใน Migrationควรหยุดตรวจ
ก่อนรัน Statementถัดไป
191. Backupช่วย Rollback
โดยเฉพาะ Migrationที่มี:
ALTER
UPDATE
DELETE
192. Error 1064จาก Comment ใน SQL File
SQL Commentsมี Syntaxเฉพาะ
ถ้า Commentถูกตัด/แก้ผิดอาจรบกวน Script
193. -- Comment ต้องใช้ให้ถูก
อย่าเอา Comment Styleจากภาษาอื่นมาใส่ SQLสุ่ม ๆ
194. // ไม่ใช่ SQL Commentทั่วไปแบบเดียวกับ JavaScript
อาจทำให้ Import Error
195. # อาจมี Behaviorเฉพาะใน MySQL/MariaDB
แต่เพื่อ Portabilityควรใช้ Styleที่ Resourceต้นฉบับกำหนด
196. Multi-line Comments
/* ... */
ต้องปิดให้ครบ
197. Commentไม่ปิดทำให้ SQLที่เหลือพังได้
198. SQL Fileถูกแก้ด้วย Auto Formatter
บาง Toolsอาจเปลี่ยน Syntaxที่ไม่รู้จัก
Backupต้นฉบับไว้
199. Encoding File มีผลไหม
Character Encodingผิดอาจสร้างปัญหา Importบางชนิด
แต่ Error 1064ให้ดูตำแหน่ง Syntaxก่อน
200. BOM คืออะไร
บาง Text Filesมี Byte Order Mark
Toolsสมัยใหม่ส่วนใหญ่ Handleได้ แต่ในบาง Workflowอาจสร้างปัญหา
201. อย่าไล่แก้ Encodingก่อนเห็นหลักฐาน
อ่าน Errorตรงจุดก่อน
202. Resource SQL มี Placeholder เช่น {TABLE}
บาง Installerต้อง Replaceค่า Configurationก่อน
ถ้าคุณ Importไฟล์ Templateตรง ๆ อาจ 1064
203. ตัวอย่าง
SELECT * FROM {players_table};
ไม่ใช่ SQLจริงจนกว่าจะถูก Render/Replace
204. ตรวจว่า SQL Fileเป็น Templateหรือ Ready-to-import
สำคัญ
205. Migration Scriptอาจถูก Runผ่าน Applicationเท่านั้น
ไม่ควรนำไป Import Manualถ้า Documentationไม่ได้บอก
206. ORM คืออะไร
Libraryที่ช่วยสร้าง SQLจาก Objects/Models
FiveM Resourcesบางตัวอาจใช้ Wrapperเฉพาะ
207. ORM Bugอาจสร้าง SQLผิด
แต่ต้องดู Generated Query
208. Generated SQL สำคัญกว่า Source Template
เพราะ Databaseเห็น Queryสุดท้ายเท่านั้น
209. Log Generated Query ตอน Debug
ช่วยหาว่า Optional Fieldsประกอบผิดตรงไหน
210. แต่ปิด Verbose Query Loggingหลังแก้
เพื่อไม่สร้าง:
Logขนาดใหญ่
Sensitive Data Exposure
211. SQL Query ที่ยาวมากควรแบ่ง Debug
ตรวจ:
SELECT
FROM
JOIN
WHERE
ORDER/LIMIT
ทีละส่วน
212. Simplify Query
ตัดส่วน Optionalออกใน Test Environment
หา Minimum Queryที่ยัง Error
213. เรียกว่า Minimal Reproduction
ช่วยหา Syntaxส่วนที่ผิดเร็วขึ้น
214. Productionไม่ควรทดลองตัด Queryสด
ใช้ Test Environment
215. Error 1064หลัง Dynamic Search
เช่น Phone/MDT Resourceมี Search Filters
ถ้า Filterบางแบบสร้าง WHEREผิด:
Errorเฉพาะ Searchนั้น
216. Errorเฉพาะค้นหาชื่อมี Apostrophe
น่าสงสัย String Concatenation
217. Errorเฉพาะข้อความภาษาไทย
อาจเกี่ยวกับ Encoding/Query Builder แต่ไม่ควรสรุปจากภาษาอย่างเดียว
218. Parameterizationช่วยทั้งชื่อภาษาไทยและ Apostrophe
เมื่อ Driverรองรับ Character Setถูก
219. Errorเฉพาะ Empty Search
Dynamic Queryอาจสร้าง:
WHERE
โดยไม่มี Condition
220. Errorเฉพาะ Sort
ตรวจ ORDER BY
221. Errorเฉพาะ Page 2
ตรวจ LIMIT/OFFSET
222. Errorเฉพาะ Filterหลายตัว
ตรวจ AND/OR Joining
223. Errorเฉพาะ Bulk Save
ตรวจ Commasระหว่าง Rows/Values
224. Bulk INSERT Syntax
หลาย Rowsมักเป็น:
INSERT INTO table_name (a, b)
VALUES
(?, ?),
(?, ?);
ต้องประกอบ Commaให้ถูก
225. Trailing Commaหลัง Rowสุดท้าย
อาจทำ Syntax Error
226. Dynamic Bulk Insertต้องระวัง Empty Array
ไม่ควรสร้าง:
INSERT INTO table_name (...) VALUES;
227. Returnก่อน Queryถ้าไม่มี Rows
เป็น Logicที่สะอาดกว่า
228. SQL Transaction Syntax
Database Libraryบางตัวจัด Transactionให้ผ่าน API
อย่าผสม Raw SQL Transaction Syntaxแบบผิด Context
229. START TRANSACTION/COMMIT
เป็น Database Commands แต่ Resource APIอาจมี Transaction Functionเอง
230. ใช้ตาม Documentationของ Database Resource
ลดปัญหา Syntax/API mismatch
231. Error 1064ใน SQL Fileติดตั้ง Resource
ขั้นตอน:
หาบรรทัด Error
ดู Statementเต็ม
เปรียบเทียบไฟล์ต้นฉบับ
ตรวจ Database Version
232. Error 1064ใน Runtime Query
ขั้นตอน:
หา Resource
หา Function
Log Query/Parameters
Reproduce
Patch
233. Error 1064หลัง Custom Edit
ใช้ Version Controlย้อนดู Changeล่าสุด
234. Error 1064โดยไม่ได้แก้อะไร
ตรวจ:
Auto Update
Resource Update
Database Version Change
Configuration Change
235. Hosting Update MariaDBอาจมีผล
หาก Resourceใช้ Syntaxที่ Versionใหม่/ใหม่กว่าเปลี่ยน Behavior
แต่ต้อง Verifyก่อนสรุป
236. Errorเฉพาะหลัง Restart
Config/Environmentอาจโหลด Version Resourceคนละตัว
237. Duplicate Resource Folders
เช่น:
myresource
myresource-old
myresource-new
Serverอาจ Startตัวที่ไม่คิด
238. ตรวจ ensure Name
และ Folderจริง
239. Resource Cacheฝั่ง Serverอาจมี State
แต่ SQL Syntax Errorควรดู Source/Loaded Resourceเป็นหลัก
240. Restart Resourceหลังแก้ Code
เพื่อให้ Codeใหม่ถูกโหลด
241. Restart Databaseไม่จำเป็นสำหรับการแก้ Query Codeทั่วไป
เพราะ Syntaxอยู่ใน Resource
242. Full Server Restartไม่จำเป็นทุกครั้ง
ถ้า Resourceสามารถ Restartแยกได้และไม่กระทบ State
แต่ Productionควรทำตาม Operationsของ Server
243. Core Resourceไม่ควร Restartกลาง RPแบบสุ่ม
อาจทำ:
Player Data
Jobs
Inventory
สะดุด
244. ทดสอบใน Dev Serverดีที่สุด
ก่อน Deploy Production
245. Syntax Errorไม่ควรแก้ด้วย try/catchอย่างเดียว
การ Catch Errorช่วยไม่ให้ Resource Crash
แต่ Queryยังทำงานไม่ได้
246. Error Handling ≠ Fix
ต้องแก้ SQLจริง
247. แต่ Error Handlingควรมี
เพื่อให้ Resource:
Logชัด
Failอย่างปลอดภัย
248. อย่ากลืน Errorเงียบ
เช่น Catchแล้วไม่ Logอะไร
จะทำให้ Debugยาก
249. Log Resource/Operation
เช่น:
Failed to save vehicle
ช่วยบอก Context
250. อย่า Log SQL Credentials
ไม่จำเป็น
251. Error 1064 อาจทำข้อมูลไม่ Save
ขึ้นกับ Queryที่ Fail
252. ถ้า Save Character Query Fail
Character Progressล่าสุดอาจไม่ถูกบันทึก
253. ถ้า Purchase Query Fail
ต้องตรวจว่า:
เงินถูกหักไหม
Assetถูกสร้างไหม
254. Transactionช่วยลด Partial State
ถ้า Operationหลาย Queryถูกออกแบบด้วย Transactionถูกต้อง
255. ถ้า Billing Insert Fail
Invoiceอาจไม่ถูกสร้าง
256. ถ้า Bank Log Insert Fail
อาจมีผลแตกต่างจาก Balance Updateตาม Resource Design
257. Severityขึ้นกับ Query
Syntax Errorใน Optional Log Tableไม่เท่ากับ Character Save Query
258. Server Ownerควรดู Resourceที่ Error
เพื่อตัดสินใจว่าต้อง Maintenanceหรือไม่
259. Error Spamทุก Tick
ควรหยุด Resourceที่ไม่จำเป็นชั่วคราวถ้า Logถล่มและทราบว่า Resourceนั้นเป็น Optional
แต่ต้องรู้ Dependency
260. Error Spamอาจกิน Diskผ่าน Logs
ไม่ควรปล่อยหลายวัน
261. Core Resource Syntax Error
ควรแก้ก่อนเปิด Serverให้ Playersเล่นเต็มรูปแบบ
262. Database Query Tester
Developerสามารถทดสอบ Queryใน Test Database
โดยใช้ Schemaเดียวกันกับ Production
263. Schemaเดียวกันสำคัญ
เพราะ Queryบางแบบอาจใช้:
Columns
Types
ที่ต่างกัน
264. Test Dataไม่ต้องเหมือน Productionทั้งหมด
แต่ควรมี Edge Casesที่ทำ Error
265. Edge Caseเช่น Apostrophe
เช่นชื่อ:
O'Neil
266. Unicode Edge Case
เช่นชื่อภาษาไทย
267. Empty Value
เช่น Searchว่าง
268. NULL Value
Resourceต้อง Handle
269. Long String
ทดสอบ Length Validation
270. Special Characters
ใช้ Parameterizationและ Validation
271. Reserved Keyword
ทดสอบ Column/Sort Namesที่ Resourceอนุญาต
272. NULL Syntax
SQLใช้:
NULL
ไม่ใช่ String:
'NULL'
สองอย่างความหมายไม่เหมือนกัน
273. Comparison กับ NULL
โดยทั่วไปต้องใช้ Syntaxที่ถูก เช่น:
IS NULL
ไม่ใช่ Logicแบบ String Comparison
274. Query Builderที่สร้าง = NULL
อาจไม่ได้ผลตามที่ Developerคิด แม้ไม่จำเป็นต้องเกิด 1064
จึงควรเข้าใจ SQL semanticsด้วย
275. Boolean Values
Database Schemaอาจใช้:
TINYINT
Numeric
ตาม Resource
อย่าผสม Syntaxจาก Databaseอื่นโดยไม่ตรวจ
276. JSON Functions
MariaDB/MySQLมี Functionsด้าน JSON แต่ Compatibility/Versionสำคัญ
Resourceที่ใช้ Query JSONขั้นสูงต้องตรวจ Requirements
277. Errorใกล้ ->> หรือ JSON Operator
อาจเป็น Version/Dialect Compatibility
ไม่ใช่ Quoteธรรมดา
278. Window Functions
Queryขั้นสูงอาจต้อง Database Versionที่รองรับ
279. CTE/Recursive Queryก็เช่นกัน
ถ้า Third-party Resourceใช้ Featureใหม่:
Update Compatible Database
หรือใช้ Resource Versionที่รองรับ Environment
ตาม Developer
280. อย่าแก้ Queryขั้นสูงแบบตัด Featureทิ้งสุ่ม ๆ
อาจทำ Gameplay Logicผิด
281. Resource Developerควรระบุ Minimum DB Version
Server Ownerควรตรวจก่อนติดตั้ง
282. SQL Syntax Error Checklist
Keywordถูกไหม
Commaครบไหม
Quoteครบไหม
Parenthesesครบไหม
Table/Columnถูกไหม
Reserved Wordไหม
Dynamic WHEREสมบูรณ์ไหม
Database Versionรองรับไหม
283. Checklistหลัง Custom Edit
ดู Git Diff
Search Query
ตรวจ Placeholder
Testกับ Inputsหลายแบบ
284. Checklistหลัง Resource Update
Changelog
Migration
Database Version
Framework Compatibility
285. Checklistหลัง Import SQL
Error Statement
Line Number
Partial Migration
Schema State
286. Checklist Dynamic Query
Empty Conditions
Empty Arrays
Optional Sort
LIMIT/OFFSET
Comma Joining
287. Checklist Security
Parameterized Values
Server-side Validation
No raw Client SQL fragments
288. สิ่งที่ไม่ควรทำ
ปิด SQL Modeมั่ว
Reinstall Database
ลบ Database
เปลี่ยน Password
เปิด Portเพิ่ม
Clear Cache
Ignore Error
ถ้า Errorจริงคือ 1064
289. Quick Fix Flow
1064
↓
Read "near ..."
↓
Find resource/query
↓
Inspect previous tokens
↓
Fix syntax
↓
Run in test DB
↓
Deploy
↓
Re-test feature
290. ตัวอย่าง Error — Comma เกิน
ผิด:
UPDATE users
SET name = 'John',
WHERE id = 1;
แก้:
UPDATE users
SET name = 'John'
WHERE id = 1;
291. ตัวอย่าง Error — Quote ขาด
ผิด:
SELECT *
FROM users
WHERE name = 'John;
แก้:
SELECT *
FROM users
WHERE name = 'John';
292. ตัวอย่าง Error — Parenthesis ขาด
ผิด:
INSERT INTO users (name, job
VALUES ('John', 'police');
แก้:
INSERT INTO users (name, job)
VALUES ('John', 'police');
293. ตัวอย่าง Error — Trailing Comma
ผิด:
SELECT name, job,
FROM users;
แก้:
SELECT name, job
FROM users;
294. ตัวอย่าง Error — Dynamic WHERE
ผิด:
SELECT *
FROM users
WHERE;
แก้ Logicไม่ให้เพิ่ม WHERE หากไม่มี Condition
295. ตัวอย่าง Error — Dynamic AND
ผิด:
SELECT *
FROM users
WHERE AND job = 'police';
แก้ Query Builder
296. ตัวอย่าง Error — LIMIT
ผิด:
SELECT *
FROM users
LIMIT;
ต้อง Validateและใส่ค่าที่เหมาะสมก่อน Query
297. ตัวอย่าง Error — Reserved Name
ถ้า Columnชื่อชน Keyword:
SELECT `order`
FROM orders;
อาจต้องใช้ Identifier Quotingตาม Schema
298. แต่เปลี่ยนชื่อ Columnได้ดีกว่าไหม
สำหรับ Custom Schemaใหม่:
ชื่อที่ไม่ชน Keywordอ่านง่ายกว่า
แต่ถ้าเป็น Third-party Resourceอย่า Renameเองโดยไม่ตรวจ Codeทั้งหมด
299. ตัวอย่าง Error — SQL Fileคนละระบบ
นำ PostgreSQL-specific Syntaxมา Importใน MariaDB
อาจขึ้น 1064
ใช้ SQL Packageที่ตรงกับ Database Engine
300. ตัวอย่าง Error — Versionไม่รองรับ
Queryถูกสำหรับ Versionหนึ่ง แต่ Serverใช้ Versionที่เก่ากว่า
ตรวจ Resource Requirements
301. FAQ — FiveM MySQL Error 1064 คืออะไร
คือ SQL Syntax Error หมายความว่า MySQL/MariaDBไม่สามารถ Parse Queryที่ Resourceส่งมาได้
302. You have an error in your SQL syntax แก้ยังไง
ดูข้อความหลัง:
near '...'
แล้วเปิด Queryบริเวณก่อนและหลังตำแหน่งนั้น
303. Error 1064 เกิดจาก Database พังไหม
โดยทั่วไปไม่
Databaseกำลังทำงานพอที่จะรับ Queryและตอบ Syntax Errorกลับมา
304. Error 1064 เกิดจาก Passwordไหม
โดยทั่วไปไม่
Passwordผิดมักเกิด Authentication Errorก่อน Queryจะถูกประมวลผล
305. Error 1064 เกิดจาก Tableไม่มีไหม
Table Missingมักเป็น Errorคนละประเภท เช่น 1146
306. Error 1064 เกิดจาก Columnไม่มีไหม
Unknown Columnมักเป็น Error 1054
307. Error 1064 มักเกิดจากอะไร
Typo
Comma
Quote
Parenthesis
Dynamic Query
Reserved Word
Unsupported Syntax
308. Clear FiveM Cacheช่วยไหม
โดยทั่วไปไม่ใช่การแก้ SQL Syntax Errorฝั่ง Server
309. Restart MySQLช่วยไหม
ไม่ ถ้า Resourceส่ง Queryผิดเดิม
310. Restart FiveMช่วยไหม
ไม่แก้ Source Codeที่ผิด แต่หลังแก้ Resource Codeแล้วอาจต้อง Reload Resource
311. Reinstall MariaDBช่วยไหม
ไม่ควรทำเพียงเพราะ Error 1064
312. ต้อง Backupไหม
ถ้าเพียงแก้ SELECT Queryใน Codeอาจไม่เปลี่ยน Database
แต่ก่อน Migration/ALTER/UPDATE Productionควร Backup
313. Errorเกิดหลัง Update Resourceทำอย่างไร
ตรวจ Changelog, Migration, Resource Versionและ Database Compatibility
314. Errorเกิดหลังแก้ Codeเอง
ย้อนดู Changeล่าสุดก่อน
315. Errorเกิดเฉพาะชื่อมี '
ควรตรวจว่ากำลังต่อ SQL Stringเองหรือไม่ และเปลี่ยนไปใช้ Parameterized Queryที่ Resourceรองรับ
316. Errorเกิดเฉพาะ Searchว่าง
Dynamic Queryอาจสร้าง WHERE หรือ LIMITไม่สมบูรณ์
317. Errorเกิดเฉพาะบาง Filter
ตรวจการต่อ AND, OR, Parentheses
318. Errorเกิดตอน Import SQL
ตรวจ Statementที่ Error, Database Versionและ SQL Fileว่าตรง Resourceหรือไม่
319. Queryทำงานใน phpMyAdminแต่ FiveM Error
ตรวจ Queryจริงที่ FiveMส่ง รวมถึง:
Parameters
Dynamic parts
อาจไม่เหมือน Queryที่คุณทดสอบ
320. Queryทำงานบนเครื่องเก่าแต่เครื่องใหม่ไม่ทำงาน
ตรวจ:
MySQL/MariaDB Version
SQL Mode
Resource Version
321. oxmysqlเป็นต้นเหตุไหม
ไม่ควรสรุปจากชื่อใน Error ต้องดู Resourceที่สร้าง Queryและ SQLจริง
322. SQL Queryยาวมากตรวจยังไง
Format Queryให้อ่านง่าย แล้วแยก:
SELECT
FROM
JOIN
WHERE
GROUP/ORDER
LIMIT
ทีละส่วน
323. ใช้ AIแก้ SQLได้ไหม
สามารถใช้ช่วยอธิบาย Syntaxได้ แต่สำหรับ Productionต้องตรวจ Schemaจริงและอย่าเผย:
Password
Connection String
Sensitive Player Data
324. Query Errorหนึ่งครั้งต้องปิด Serverไหม
ขึ้นอยู่กับ Query
ถ้าเป็น Core Save/Banking/Inventory Query:
ควรให้ความสำคัญสูง
ถ้าเป็น Optional Log Queryอาจมี Impactต่ำกว่า
325. ทำไมไม่ควร Ignore 1064
เพราะ Queryนั้นไม่ได้ทำงานตามที่ Resourceต้องการ
อาจทำให้:
Save Fail
Featureพัง
Dataไม่ครบ
สรุป FiveM MySQL Error 1064 SQL Syntax Error แก้ยังไง
FiveM MySQL Error 1064 คือ SQL Syntax Error ที่เกิดเมื่อ MySQL/MariaDB ไม่สามารถอ่าน Query ที่ Resource ส่งมาได้ตามไวยากรณ์ SQL ที่รองรับ โดยต้นเหตุมักมาจาก Keyword พิมพ์ผิด, Comma เกินหรือขาด, Quote ไม่ครบ, Parentheses ผิด, Dynamic Query ต่อไม่สมบูรณ์ หรือ Resource ใช้ Syntax ที่ไม่เข้ากับ Database Version
หลักที่ควรจำคือ:
1064 → ดู Query
1054 → ดู Column
1146 → ดู Table
1062 → ดู Duplicate Key
1406 → ดูขนาดข้อมูล
สิ่งที่ comsiam แนะนำคือเมื่อเจอ Error 1064 ให้อ่านข้อความหลังคำว่า near ให้ครบ แล้วตรวจส่วนก่อนตำแหน่งนั้นด้วย เพราะ Database มักชี้จุดที่ Parser “อ่านต่อไม่ได้” ไม่จำเป็นต้องเป็นตัวอักษรที่ผิดจริงโดยตรง จากนั้นหา Resource, File, Function และ Query ที่สร้าง Error ก่อนแก้เฉพาะจุด
อีกหลักที่ comsiam แนะนำคืออย่าแก้ปัญหา SQL Syntax ด้วยการล้าง Cache, เปลี่ยน Password, เปิด Database Port หรือ Reinstall MariaDB แบบสุ่ม เพราะ Connection ผ่านแล้ว สิ่งที่ต้องตรวจคือ Query Structure + Parameters + Resource Version + Database Compatibility และถ้าจะรัน Migration, ALTER, UPDATE หรือ DELETE กับ Production Database ให้ Backup ก่อนเสมอ
Comments
Post a Comment