如何转义 php mysqli 查询? [复制]

Posted

技术标签:

【中文标题】如何转义 php mysqli 查询? [复制]【英文标题】:How to escape php mysqli query? [duplicate] 【发布时间】:2016-01-19 09:23:00 【问题描述】:

我正在将数据从 AJAX 传递到我的 php。我只是运行for 循环来进行查询。我的数据的问题是它包含单引号。

我在查询中使用单引号将我的参数括起来。查询类似于

   INSERT INTO myTable (column1.column2) VALUES('value1', 'value2'), 
   ('value'1', 'value2');

我想逃跑

   INSERT INTO myTable (column1.column2) VALUES('value1', 'value2'), 
   ('value\'1', 'value2');

我刚试过mysqli_real_Escape_String。它返回类似

   INSERT INTO myTable (column1.column2) VALUES(\'value1\', \'value2\'), 
   (\'value\'1\', \'value2\');

所以查询执行失败。

我不认为使用htmlspeciachars 是正确的方法。

有什么建议吗?

【问题讨论】:

我建议您使用PDO 在 PHP 中访问数据库。如果你不会,你可以使用mysql_escape_string 使用准备好的语句 - mysqli 和 PDO 都支持它们,一旦你掌握了它们,它会让生活变得更加轻松 我不认为我可以使用参数。由于行数和列数是动态的。我只使用 mysqli_query 【参考方案1】:

您绝对应该使用准备好的语句。它们没有那么棘手。

但是,如果您不打算实现这一目标,那么您只需要正确使用 mysqli_real_escape_string

根据您得到的结果,我猜您将整个查询包装在 mysqli_real_escape_string 函数中。但是,您应该将值包装在其中。

"INSERT INTO myTable (column1, column2) VALUES('value1', 'value2'), 
   ('" . mysql_real_escape_string("value'1") . "', 'value2')";

这是一种非常做作的做事方式。但想法是:只将值包装在mysqli_real_escape_string() 中。

【讨论】:

以上是关于如何转义 php mysqli 查询? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

mysqli_real_escape_string 如何无法阻止 SQL 注入? [复制]

使用 MySQLi 时如何防止 SQL 注入? [复制]

在 PHP 中执行参数化查询的最佳实践? [复制]

如何在遍历使用 mysqli_use_result 返回的行时执行 mysqli 查询? (PHP)

如何使这个 mysqli 查询在 PHP 中运行得更快?

如何将 mysqli 结果转换为 JSON? [复制]