C#中MySQL查询触发语法错误,请求协助排查原因
解决你的MySQL语法错误问题
兄弟,你的问题根源很明显:字符串拼接时缺少空格,导致生成的SQL语句语法错误。
你看,你把"FROM users"和"JOIN user_auth_tickets"直接拼在一起了,结果生成的SQL里会出现FROM usersJOIN user_auth_tickets这种奇怪的写法——数据库根本识别不了usersJOIN这个东西,自然就会在解析到ON关键字的时候报错,也就是你看到的You have an error in your SQL syntax; check the manual... near 'ON users.id = user_auth_tickets.user_id...'。
给你修正后的代码,只需要在拼接的字符串之间补上空格就行:
dbConnection.SetQuery("SELECT users.id,users.username,users.rank,users.motto,users.look,users.gender,users.last_online,users.credits,users.activity_points,users.home_room,users.block_newfriends,users.hide_online,users.hide_inroom,users.vip,users.account_created,users.vip_points,users.machine_id,users.volume,users.chat_preference,users.focus_preference,users.pets_muted,users.bots_muted,users.advertising_report_blocked,users.last_change,users.gotw_points,users.ignore_invites,users.time_muted,users.allow_gifts,users.friend_bar_state,users.disable_forced_effects,users.allow_mimic,users.rank_vip " + "FROM users " // 这里补上空格,避免和后面的JOIN连在一起 + "JOIN user_auth_tickets " + "ON users.id = user_auth_tickets.user_id " + "WHERE user_auth_tickets.auth_ticket = @sso AND last_ip = @lastIp " + "LIMIT 1" );
额外给你两个小建议:
- 以后遇到这类语法错误,可以先把拼接后的完整SQL语句打印出来,一眼就能发现这种空格缺失的低级问题;
- 你已经在用参数化查询(
@sso和@lastIp)了,这非常棒,能有效避免SQL注入,继续保持这个好习惯!
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

