在SQL查询生成中使用字符串插值时,避免语法错误警告

时间:2014-08-27 14:17:16

标签: phpstorm

当使用字符串插值,sprintf或通常任何形式的动态创建SQL查询字符串时,PhpStorm通常会跳闸。例如:

$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语言解析的情况下压制那些?

3 个答案:

答案 0 :(得分:7)

我从Jetbrains博客找到了这个问题的明确答案:

http://blog.jetbrains.com/phpstorm/2014/11/database-language-injection-configuration/

您需要添加\%\w+。在您的工具>数据库部分。

PhpStorm configuration screenshot

答案 1 :(得分:6)

您可以按照以下两个步骤进行基本的SQL解析和语法检查:

  1. 将方言设为Generic。在File -> Settings中设置以下内容:
  2. PHPStorm settings, "Generic" SQL dialect Zoom

    1. 然后,禁用SQL dialect detection检查:
    2. enter image description here Zoom

      使用Ok确认,您已完成。

      当然,如果PHPStorm能够通过变量替换来解析SQL字符串,那将会很棒,但遗憾的是,情况并非如此(

      )。

答案 2 :(得分:1)

我提出的唯一解决方案是在SQL之前添加换行符,如:

$sql = "\nINSERT INTO ...";

PhpStorm认为它现在是一个普通的字符串,不会尝试将其解析为SQL。