【发布时间】: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)。<SQL Keywords>方言是“假”方言,仅在不会对您的代码运行实际 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和类似的(只需搜索“真正的转义字符串与准备好的语句”)。这完全取决于您过滤/转义输入的能力。总体而言,准备好的语句更安全。