2014-08-30 114 views
4

我有一个WordPress插件,我正在编辑PHPStorm。 PHPStorm在这样的查询发现语法错误时的SQL方言设置到MySQL:PHPStorm在WordPress插件查询占位符上的警告

$foo = $wpdb->get_var(
      $wpdb->prepare(
       'SELECT `foo` FROM `some_table` WHERE `id` = %d', 
       $bar 
      ) 
     ); 

具体来说,它认为%d和与此消息抱怨:

<expression> expected, got '%' 

当然,%d是一个完全合法WordPress查询中的占位符。有没有办法配置PHPStorm来接受这个?或者我必须禁用SQL语句上的所有检查,如this answer中所建议的那样?

请注意,我正在使用PHPStorm EAP 8(138.1751),而其他占位符(如%s)也会发生同样的情况。

回答

3

这是现在可以在PHPStorm 8,作为官方PHPStorm博客的这篇文章解释说:

Database Language Injection Configuration

要解决这个问题:

  • 转到工具>数据库
  • 确保与正在讨论的占位符匹配的正则表达式位于自定义参数列表中。默认情况下,列表包括\%\w+,其将匹配%s,%d等。
  • 选中标记为“在其他语言的字符串文字使用”

PHPStorm现在将正确地认识到像WordPress中使用的占位符的框。

2

Nope - %d从SQL角度来看是无效的语法(ANY当前支持的方言)。 WI-3672WI-2324门票是仍然有效。

但PhpStorm现在V8支持$var(如果你可以用它代替%语法) - http://youtrack.jetbrains.com/issue/WI-2450


因为它是WordPress的具体问题,这是我很难给你任何真正的建议(特别是因为我不使用WordPress自己)不包括that one

但一般来说,你可以使用由特定的数据库引擎支持的本机占位符(检查 “示例” 部分http://php.net/manual/en/pdo.prepare.php):

  • 无名?
  • 命名为:id

我只是不当然,如果这可以应用于WordPress的发展。


P.S. Generic是新的Keywords only方言 - 如果使用正确的SQL方言显示许多警告/错误(并非实际错误),则可以回到该方言。

+0

是的,我知道这是非标准的SQL语法。我认为这是WordPress在MySQLi和PDO出现之前处理准备好的语句的尝试。但[这是我现在坚持](http://codex.wordpress.org/Class_Reference/wpdb#Placeholders),除非我使用PDO或MySQLi推出我自己的数据库连接。使用类似'$ var'的文字变量将不起作用,因为它阻止了任何类型的参数化(我将不得不添加比当前更多的数据验证,转换和转义)。而“关键字只有”不再是一种方言,所以我甚至不确定我能否使用它。 – 2014-08-30 21:33:58

+1

尝试“通用”而不是“仅关键字”。 – LazyOne 2014-08-30 22:36:06

+0

那么,我100%肯定我曾尝试过,但显然不是。我不得不关闭“SQL方言检测”代码检查,以使PHPStorm对我使用“Generic”作为方言感到高兴。不幸的是,这似乎基本上禁用*所有* SQL检查;它认为'SELECT WHERE foo FROM bar'看起来很好。看起来这是我现在可以做的最好的,但是,所以你把你的评论添加到你的答案中,我会接受它。 – 2014-08-30 22:57:32