Strapi连接MySQL执行原生SQL遇表名含连字符语法问题求助
解决方案
1. 确认表名的反引号用法(MySQL支持带连字符的表名)
MySQL允许表名包含连字符,只要用**反引号(`)**完整包裹表名即可。在JavaScript模板字符串中,由于模板本身用反引号包裹,内部的反引号需要用反斜杠转义,你的写法本身是正确的,可参考标准格式:
return strapi.connections.default.raw(` DELETE FROM nurses; DELETE FROM \`users-permissions_user\`; `);
2. 开启MySQL多语句执行支持
如果执行仍报错,大概率是MySQL驱动默认禁用了多语句执行(防SQL注入风险),需要在Strapi的测试环境数据库配置中开启该选项:
找到项目config/env/test/database.js文件,修改MySQL连接配置,添加multipleStatements: true:
module.exports = ({ env }) => ({ defaultConnection: 'default', connections: { default: { connector: 'bookshelf', settings: { client: 'mysql', host: env('DATABASE_HOST', 'localhost'), port: env.int('DATABASE_PORT', 3306), database: env('DATABASE_NAME', 'strapi_test'), username: env('DATABASE_USERNAME', 'root'), password: env('DATABASE_PASSWORD', ''), options: { multipleStatements: true } }, options: {} } } });
注意事项
- 仅在测试环境开启
multipleStatements,生产环境务必禁用,避免SQL注入风险 - 若单条SQL执行正常、多条报错,可直接定位为多语句支持未开启的问题
内容的提问来源于stack exchange,提问作者thevikas
相关产品推荐
相关产品推荐

