MySQLi插入语句意外T_ENCAPSED_AND_WHITESPACE

时间:2013-09-05 20:29:24

标签: php mysql mysqli

我不能为我的生活找出为什么PHP抱怨以下内容:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

代码:

while($row = $rbh->fetchAssoc($rbhSQL)) {
   $statsSQL = $stats->query("INSERT INTO usage (user, grp, type, size, blocks, count, filesystem) VALUES ($row['owner'], $row['gr_name'], $row['type], $row['size'], $row['blocks'], $row['count'], \"$fsName\") ON DUPLICATE KEY UPDATE size=$row['size'], blocks=$row['blocks'], count=$row->['count']");
}

我错过了什么?

1 个答案:

答案 0 :(得分:2)

将变量注入字符串时,数组值将引用without single quotes around the key

这是有效的:

... VALUES ($row[owner], $row[gr_name], ...

然而,首选的目的是改为使用parameterized query,这有很多好处:

  • 确保您的应用程序不受SQL注入的影响(甚至可能在数据受您控制时无意中发生)
  • 使查询更具可读性
  • 完全回避此问题

如果这不是SQL查询,我仍然建议使用sprintf而不是直接注入所有这些变量。