<;参考资料>;PHPStorm上的文件应为意外结尾

<;参考资料>;PHPStorm上的文件应为意外结尾,php,mysql,phpstorm,Php,Mysql,Phpstorm,我正在使用PHPStorm,出现了一些有趣的错误/警告。不确定我是否跳过了某些配置。 例如,这里有一个查询 $query = "INSERT INTO tblperson ("; $query .= " personName, personLname, personNumber, personPhone, personAttr"; $query .= ") VALUES ("; $query .= " '{$personName}', '{$personLname}', {$personN

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

$query  = "INSERT INTO tblperson (";
$query .= "  personName, personLname, personNumber, personPhone, personAttr";
$query .= ") VALUES (";
$query .= "  '{$personName}', '{$personLname}', {$personNumber}, {$personPhone}, '{$personAttr}'";
$query .= ")";
我在代码的第一行得到这样的警告:“预期的,意外的文件结尾”。PHPStorm警告我的insert语句中是否缺少任何内容


当我运行代码时,我可以插入一条记录而没有任何问题,但我仍然怀疑可能有一个我没有的改进。

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


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

在此处添加此选项是因为另一个答案仅会禁用所有地方的检查,而不仅仅是针对特定语句

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

对于编辑器中的一条语句,实际上没有正确的方法可以忽略此错误

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

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

例如,将下面的语句从

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

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


我意识到可能还有其他方式来写陈述;但是,这个答案考虑了原始问题中的陈述风格,同时解决了PhpStorm标记特定陈述错误的问题。

您已经解决了这个问题,但我仍将对此稍作评论。“PHPStorm警告我的这个insert语句中是否缺少任何内容?”是--
insert INTO tblperson(
是无效的(准确地说是不完整的)SQL语句,来自任何真实的SQL方言(在您的例子中是MySQL)。
方言是“假的”仅当不会对您的代码运行实际的SQL检查时(这是您应该对此类代码使用的),用于基本语法高亮显示的方言。我的建议是更改您的代码(如果它是您的,您可以实际执行)要摆脱这种相当不安全的代码,并使用预先准备好的语句/占位符,因为您当前的代码易于SQL注入(在使用这种SQL命令生成时,很难正确清理输入文本/变量)@LazyOne谢谢你的回答!我正在使用real_escape_字符串来表示这些值。你仍然建议使用prepared语句吗?因为我将遵循你的指导:)这将需要一些时间来实现^^^当然是的。很少有例子:1)2)3)4)5)和类似的(只需搜索“真正的转义字符串与准备好的语句”)。这完全取决于你过滤/转义输入的能力。全面准备的报表更安全。
$start = "INSERT " . "IGNORE INTO table1(";
$mid = ") VALUES (";
$end = ")";