SQL sözdizimi hatası
Bir script veritabanına anlayamadığı bir istek gönderdi.
Önce şunu yap
Bu, script'teki bir hata. Bu satırla birlikte yazana bildir.
Ne anlama gelir
MySQL ifadeyi reddetti. Mesaj, pes ettiği noktadan başlayan metni alıntılar, ki bu en kullanışlı kısımdır: ne alıntılanıyorsa, sorun onda ya da hemen ondan öncededir.
Neden olur
Ne sıklıkla doğru cevap olduğuna göre sıralı.
- 1
Parametre yerine metin araya sokma
SQL'i
..ile ve tırnak içeren bir değerle kurmak. Bu aynı zamanda bir SQL enjeksiyonu deliğidir, yani düzeltmenin iki nedeni var. - 2
Sütun adı olarak kullanılan ayrılmış bir kelime
rank,groups,key,order,read. MySQL 8,rankı ayrılmış kelime olarak ekledi, ki bu da bir gecede pek çok eski FiveM şemasını bozdu. - 3
Sonda kalan bir virgül
SELECT a, b, FROM users— genelde listeden bir sütun silindikten sonra kalır. - 4
Yer tutucu sayısı uyuşmuyor
Değerden çok
?, ya da hiç sağlanmamış adlandırılmış bir parametre. Bazı sürücüler bunu bağlama hatası yerine sözdizimi hatası olarak bildirir. - 5
Tek sorguda birden fazla ifade
oxmysql, sürücü bunun için yapılandırılmadıkça tek bir çağrıda
;ile ayrılmış iki ifadeyi çalıştırmaz.
Hangisinin seninki olduğu nasıl anlaşılır
Hatadaki alıntılanmış parçayı oku. Sonra son SQL'i yazdır ve bir MySQL istemcisinde elle çalıştır — orada da aynı şekilde başarısız olursa sorun ifadedir; başarılı olursa parametrelerdir.
Nereye bakmalı
Kaynaktaki sorgu metni, ve bağlanan değerler.
Nasıl düzeltilir
Her zaman yer tutucu kullan. Hem sözdizimi sorununu hem enjeksiyon sorununu aynı anda çözer:
-- yanlış
MySQL.query('SELECT * FROM users WHERE name = "' .. name .. '"')
-- doğru
MySQL.query('SELECT * FROM users WHERE name = ?', { name })Ayrılmış kelimeleri ters tırnağa al:
SELECT `rank` FROM users WHERE identifier = ?
Hâlâ kendi kodunda mı takıldın?
Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.
bug_reportServer Fixer'ı açBu tür bir hata için Script Optimizer buna yol açan sorgu kalıplarını yakalar.