提问人:deceze 提问时间:8/27/2014 更新时间:10/10/2015 访问量:3160
避免在 SQL 查询生成中使用字符串插值时出现语法错误警告
Avoid syntax error warnings when using string interpolation in SQL query generation
问:
当使用字符串插值或通常任何形式的动态创建 SQL 查询字符串时,PhpStorm 通常会跳闸。例如:sprintf
$placeholders = join(', ', array_fill(0, count($ids), '?'));
$stmt = $db->prepare("SELECT * FROM foo WHERE bar IN ($placeholders)");
$stmt->execute($ids);
艺术
$db->prepare(sprintf('INSERT .. (%s) ..', $foo))
可以理解的是,这些会在 PhpStorm 中触发某种 SQL 语法错误警告。有没有办法在不完全禁用 SQL 语言解析的情况下抑制这些内容?
答:
7赞
nem75
12/19/2014
#1
您可以按照以下两个步骤进行基本的 SQL 解析和语法检查:
- 将方言设置为 。在设置以下内容:
Generic
File -> Settings
- 然后,禁用检查:
SQL dialect detection
确认,你就完成了。Ok
当然,如果 PHPStorm 可以通过变量替换来解析 SQL 字符串,那就太好了,但遗憾的是,情况并非如此。
评论
1赞
tdtm
5/30/2016
对于较新的 IntelliJ/PHPstorm 版本,此答案现已过时。Emerge 的答案现在是最好的选择。
1赞
Elliot Chance
1/14/2015
#2
我想出的唯一解决方案是在 SQL 之前添加一个换行符,例如:
$sql = "\nINSERT INTO ...";
PhpStorm 现在认为它是一个普通的旧字符串,不会尝试将其解析为 SQL。
评论
1赞
deceze
1/14/2015
还不如关闭SQL语言注入,不是吗?
1赞
Elliot Chance
1/14/2015
不,因为我希望它用于我的整个项目。但在这种罕见的情况下可以忽略。大多数 PhpStorm 警告/错误都可以为上面带有 php 注释的单行禁用,但这似乎不适用于 SQL。
2赞
deceze
1/14/2015
我仍然不愿意为了误导我的IDE而改变我的实际代码。我可以忍受注释注释,因为它至少是明确的(不知道这是否真的不可能)。但是像这样的黑客攻击会在半年后让每个人都失望......话虽如此,有趣的解决方法!
0赞
Elliot Chance
1/14/2015
我同意。另外,添加另一条评论解释了为什么那里的额外字符有点矫枉过正。当那个人一年后回来并说“这很奇怪,一定是错别字”时,他们将其删除。他们要么收到错误并发布错误的原因,要么不会收到错误,因为 IDE 已同时修复该问题。无论哪种方式都没有造成损害......
8赞
Emerge
10/10/2015
#3
我从 Jetbrains 博客中找到了这个问题的明确答案:
http://blog.jetbrains.com/phpstorm/2014/11/database-language-injection-configuration/
您需要添加 .在“工具>数据库”部分中。\%\w+
评论
2赞
tdtm
5/30/2016
请注意,它似乎在 and 子句中起作用,但在 a 之后的任何位置都失败(例如 an )。SELECT
WHERE
WHERE
ORDER BY
评论