【问题标题】:How to escape php mysqli query? [duplicate]如何转义 php mysqli 查询? [复制]
【发布时间】: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

标签: php mysqli


【解决方案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() 中。

【讨论】:

    猜你喜欢
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2013-09-23
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多