用户:
Nysidla查看:2 回复:4 评论:2 创建时间:2023-02-05T10:40:34
嗨嗨嗨~
——————————————————————————————————————
这是一个常见的PG数据库:
async function initTable() {
await db.sql`CREATE TABLE IF NOT EXISTS player(
sql TEXT NOT NULL,
userKey CHAR(16) PRIMARY KEY UNIQUE NOT NULL
)`;
}
async function loadPlayer(user) {
user.sql = {
a:{
"as"
},
b:{
"ab"
}
}
const data = (await db.sql`SELECT * FROM player WHERE "userKey"=${user.player.userKey};`)[0]
if (data) {
user.sql = JSON.parse(data.sql)
} else {
await insertPlayer(user)
}
}
async function insertPlayer(user) {
return await db.sql`INSERT INTO playe (
sql,
"userKey"
) VALUES (
${JSON.stringify(user.sql)},
${user.player.userKey}
)`
}
async function updatePlayer(user) {
return await db.sql`UPDATE player SET
sql=${JSON.stringify(user.sql)},
WHERE "userKey"=${user.player.userKey}`
}
每一个函数中都会有一个报错,都是一些常见报错,下面来一一讲解~
一:error: column “userKey” does not exist因为userKey没有用""保住,所以实际字段名是userkey,引发了报错
二:这个大家可以看到没有任何问题,这个很特殊,最后讲解
三:这个是表名player写成了playe,playe表并没有创建,引发报错
四:error: syntax error at or near “WHERE”where前面多了个逗号
其它类型的报错:
无限的query timeout属于数据库服务器的问题, 无法通过代码解决, 只能靠后台技术员修, 在群里把地图链接发给只因只因喵
error: column “userName” does not exist创建表格create table里忘了定义userName这个字段
error: syntax error at or near “OR”使用了PG不支持的SQLite简写语法 INSERT OR REPLACE, 需要把它改成PG的语法。
error: invalid sql parameter误把js对象当作参数输入进字段
最后来说说剩下的那个错误:JSON.parse!
因为JSON.parse无法完全解析嵌套对象。
那么怎么才能完全解析呢?
答案就是eval("("+data.sql+")")
没错,就是这样()()()()()
至于原理是啥……我也不知道()反正eval是又好用,又危险的。