Memahami "Ralat sintaks pada akhir input" Ralat dalam PostgreSQL
Dalam PostgreSQL, mesej ralat "pq: F:"scan .l" M:"ralat sintaks pada akhir input" S:"ERROR" C:"42601" P:"50" R:"scanner_yyerror" L:"993"" menunjukkan masalah dengan sintaks pernyataan SQL.
Punca:
Isu khusus dalam kes ini berkemungkinan disebabkan oleh watak pemegang tempat parameter yang digunakan dalam pernyataan yang disediakan.
MySQL menggunakan ? sebagai pemegang tempat parameter, manakala PostgreSQL menggunakan $1, $2, dsb. Dalam pernyataan SQL yang disediakan:
db.Query(`SELECT COUNT(*) as N FROM email WHERE address = ?`, email)
tanda soal (?) sedang digunakan sebagai pemegang tempat untuk alamat e-mel. Walau bagaimanapun, PostgreSQL tidak mengenali sintaks ini.
Penyelesaian:
Untuk menyelesaikan isu ini, cuma gantikan tanda soal dengan $1:
db.Query(`SELECT COUNT(*) as N FROM email WHERE address = `, email)
Cadangan:
Untuk mengelakkan ralat sedemikian dalam masa hadapan, sentiasa gunakan ruang letak parameter yang betul yang disokong oleh sistem pangkalan data khusus anda.
Atas ialah kandungan terperinci Mengapa Pertanyaan PostgreSQL Saya Mengembalikan 'ralat sintaks pada akhir input'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!