【问题标题】:<reference> expected, unexpected end of file on PHPStorm<reference> 预期的,PHPStorm 上的文件意外结束
【发布时间】:2014-01-10 19:37:14
【问题描述】:

我正在使用 PHPStorm 并且出现了一些有趣的错误/警告。不确定我是否跳过了配置。 例如,这里是一个查询,

$query  = "INSERT INTO tblperson (";
$query .= "  personName, personLname, personNumber, personPhone, personAttr";
$query .= ") VALUES (";
$query .= "  '{$personName}', '{$personLname}', {$personNumber}, {$personPhone}, '{$personAttr}'";
$query .= ")";

我在代码的第一行收到以下警告:“预期的,意外的文件结尾”。 PHPStorm 警告我的这个插入语句有什么我遗漏的吗?

当我运行代码时,我可以毫无问题地插入一条记录,但我仍然想知道我是否缺少改进。

【问题讨论】:

  • 你已经解决了这个问题,但我还是会对此发表一点评论。 “我在 PHPStorm 警告我的这个插入语句中有什么遗漏吗?” 是的 -- INSERT INTO tblperson ( 来自任何 真实 的 SQL 语句都是无效的(准确地说是不完整的) b> SQL方言(在您的情况下为MySQL)。 &lt;SQL Keywords&gt; 方言是“假”方言,仅在不会对您的代码运行实际 SQL 检查时用于基本语法突出显示(这是您应该对此类代码使用的)。
  • 我的建议是修改你的代码(如果它是你的,并且你实际上可以这样做)以摆脱这种相当不安全的代码并使用准备好的语句/占位符,而不是,因为您当前的代码容易发生 SQL 注入(在使用此类 SQL 命令构建时正确清理输入文本/变量非常困难)。
  • @LazyOne 感谢您的出色回答!我正在为这些值使用 real_escape_string。您仍然建议使用准备好的语句吗?因为我会在这里跟随你的领导:) 这需要一些时间来实施^^
  • 肯定是的。几个例子:1)stackoverflow.com/q/60174/7831192)stackoverflow.com/q/3101307/7831193)stackoverflow.com/q/3358950/7831194)stackoverflow.com/q/732561/7831195)stackoverflow.com/q/11454804/783119和类似的(只需搜索“真正的转义字符串与准备好的语句”)。这完全取决于您过滤/转义输入的能力。总体而言,准备好的语句更安全。

标签: php mysql phpstorm


【解决方案1】:

添加问题后,我继续搜索并在 Stackoverflow 上遇到了类似的问题,建议使用 SQL 方言。 PHPStorm 在 Preferences 下有一个设置,我已将其从 MySQL 更改为 &lt;SQL Keywords&gt;,现在它不再警告我此错误。 只需确保您已选择项目并更改方言,以便下面的所有文件都将继承相同的方言。

编辑:如 cmets 中所述,我使用 PDO 进行了更改。上面的解决方案只是避免了这个问题。

【讨论】:

    【解决方案2】:

    在此处添加此选项是因为其他答案仅在所有地方禁用检查,而不仅仅是针对特定语句。

    出现此问题的原因是当 SQL 语句拆分为多个字符串时,编辑器会丢失上下文。

    对于编辑器中的单个语句,没有适当的方法来实际忽略此错误。

    可以通过打开 SQL 检查并为文件项目设置方言来重现此问题。

    一种可能的解决方法是拆分语句的开头。

    例如,将下面的语句从

    $start = "INSERT IGNORE INTO table1(";
    $mid = ") VALUES (";
    $end = ")";
    

    $start = "INSERT " . "IGNORE INTO table1(";
    $mid = ") VALUES (";
    $end = ")";
    

    这会诱使 PhpStorm 认为您的语句只是另一个字符串,而不是将其视为 SQL 并对其执行检查。

    我意识到可能还有其他方法可以编写语句;但是,此答案允许原始问题中的语句样式,同时解决 PhpStorm 为特定语句标记错误的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2016-11-24
      • 2014-06-18
      相关资源
      最近更新 更多