-1

我一生都无法弄清楚为什么 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']");
}

我错过了什么?

4

1 回答 1

2

将变量注入字符串时,会引用数组值,而不会在 key 周围加上单引号

这将是有效的:

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

但是,更可取的是使用参数化查询,这有很多好处:

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

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

于 2013-09-05T20:31:15.410 回答