TypeORM中常规INSERT INTO语句执行失败问题求助
解决TypeORM中INSERT语句执行失败的问题
错误原因分析
- 第一个错误:SQL里双引号是用来标识表名、列名这类标识符的,你用
"Hi"包裹字符串值,数据库会把它当成列名去查找,所以报错“column 'Hi' does not exist”。 - 第二个错误:TypeORM的
queryRunner.query不支持通过注释传递参数,你手动加的--PARAMETERS["Hi", "Bye"]完全无效,参数必须通过方法的第二个参数传入,因此会提示“There is no parameter $1”。
正确写法
写法1:单引号包裹字符串值(适用于简单场景,注意SQL注入风险)
await queryRunner.query('INSERT INTO "table"(column1,column2) VALUES (\'Hi\',\'Bye\')');
或者用模板字符串简化转义:
await queryRunner.query(`INSERT INTO "table"(column1,column2) VALUES ('Hi','Bye')`);
写法2:参数化查询(推荐,彻底避免SQL注入)
TypeORM的queryRunner.query支持第二个参数传递参数数组,PostgreSQL用$1、$2作为占位符,其他数据库可能用?,根据你使用的数据库调整:
await queryRunner.query( 'INSERT INTO "table"(column1,column2) VALUES ($1,$2)', ["Hi", "Bye"] );
内容的提问来源于stack exchange,提问作者Sixjac
相关产品推荐
相关产品推荐

