我正在努力处理一个SQL插入,它在变量周围有或没有`引号失败。
我试过了:
$sql = "INSERT INTO bl1la (bl1la1, bl1la2, bl1la3, bl1la4, bl1la5, bl1la6, bl1la7, bl1la8, bl1la9, bl1la10, bl1la11) VALUES (null, $bl1la2, $bl1la3, $bl1la4, $bl1la5, $bl1la6, $bl1la7, $bl1la8, $bl1la9, $bl1la10, $bl1la11)";
并收到“检查手动错误”。我也用`引号
试了一下$sql = "INSERT INTO bl1la (bl1la1, bl1la2, bl1la3, bl1la4, bl1la5, bl1la6, bl1la7, bl1la8, bl1la9, bl1la10, bl1la11) VALUES (null, `$bl1la2`, `$bl1la3`, `$bl1la4`, `$bl1la5`, `$bl1la6`, `$bl1la7`, `$bl1la8`, `$bl1la9`, `$bl1la10`, `$bl1la11`)";
然而,这会给出一个字段名称警告。
我已经重命名了表,字段和变量名,以确保没有使用保留字(因此'bl1la *'字段名称和变量),但没有运气。
答案 0 :(得分:2)
你需要像你一样使用单引号而不是后退。试试这个:
$sql = "INSERT INTO bl1la (bl1la1, bl1la2, bl1la3...) VALUES (null, '$bl1la2', '$bl1la3'...)";
您只需要围绕不是数字的列值的单引号。您没有提供列的类型,因此我们无法确定哪些列需要单引号而哪些不需要。
同样使用这样的内联查询也可以使用SQL注入。请考虑使用参数化查询。
另一方面,反向标记用于MySQL环绕列名称(而不是值)。只有在表名不是有效标识符(例如保留字或包含空格等无效字符)时才需要它们。