猫史档案馆


【box3】SQL教程——常见报错()

用户:NysidlaNysidla查看: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是又好用,又危险的。

 


回复

上一页1 页 / 共 1下一页
NysidlaNysidla

沙发~

点赞0


评论


宁静倒数28天宁静倒数28天

我学SQL,看得懂,也知道怎么排序,一到要写就默不出来,顺序都忘了emotion_编程猫_搓头

点赞0


评论


Aaa求佛yaAaa求佛ya

emotion_编程猫_点赞

点赞0


评论


WitheredWonderWitheredWonder

哇,坟()

点赞0


评论