【问题标题】:Sanitizing data using mysqli_real_escape_string [closed]使用 mysqli_real_escape_string 清理数据 [关闭]
【发布时间】:2014-01-29 00:04:48
【问题描述】:

我学会了以下清理数据的方法

function sanitize($data)
{
return mysql_real_escape_string( $data);
}

那么,对于不了解 mysql 的初学者来说,弃用 mysql 中的某些扩展变得有点令人沮丧,但是正确了解 PHP 是一种学习体验。建议使用 mysqli_real_escape_string 代替,因为这个函数需要 2 个参数,所以我有以下

function sanitize($data){

  // 1. Create a database connection
  $db = new mysqli('localhost','root','somepass','secured_login');      
  if($db->connect_errno){
      $connect_error = 'Sorry, we are experiencing connection problems.';   
      die ($connect_error);
  }
   return htmlentities(strip_tags(mysqli_real_escape_string($db, $data)));
}

但是,我感觉很多 PHP 程序员强烈推荐使用 PDO 方法来代替

对于这么长的介绍,我深表歉意,我的问题是......使用修改后的函数 sanitize 是否安全,其中使用 mysqli_real_escape_string 代替 mysql_real_escape_string

如果没有!然后通过使用 PDO,我需要学习 OOP PHP 而不是程序。我希望我正确地提出了这个问题。正在混合两种编程方向(过程和 OOP)不受欢迎。

长期使用 PDO 的真正优势是什么?谢谢!

【问题讨论】:

  • 不要!如果您使用 MySQLi,请使用准备好的语句/绑定变量
  • 马克,所以我需要忽略使用函数 sanitize 并在使用 mysqli 时使用准备好的语句,我做对了吗
  • 您的sanitize() 函数将重复实例化新的数据库对象。您最好将数据库对象作为参数传递,如$result = sanitize($db, $data) 或类似的东西。混合 OOP 和过程方法是不明智的。它可能有效,但如果代码需要维护,它会让你或像你这样的人感到困惑。
  • 您在additionmysql_real_escape_string中使用htmlentities strip_tags非常事实意味着重要概念不理解。这些功能服务于不同的目的,添加额外的功能不会使任何东西“更安全”。最好的方法是使用占位符,但如果做不到这一点,请在 SQL 字符串中使用之前直接在数据上使用mysqli_real_escape_string。 (htmlentites 应该在 输出 HTML 时使用,而不是在这里;stripslashes 有一些情况,但不是在这里或与 HTML 一起使用。)
  • @user3001162 你should use placeholders 忘记这个可怕的sanitize 方法。 (但是,是的,这是我的一个错字 - 避免使用不推荐使用的方法。)

标签: php mysql oop pdo mysqli


【解决方案1】:

恕我直言,您必须通过重新发明轮子来学习如何使用 PDO 驱动程序来防止头痛。 使用像 PDO 这样的 OOP 驱动程序,您还可以通过扩展类覆盖某些方法并更改几行代码来做一些很酷的事情。 您还可以使用依赖注入的 PDO 派生对象。 您可以通过编辑 PDO::engine 变量来更改数据库的类型。

此外,您还可以轻松防止第一种类型的 SQL 调用

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2023-02-19
    • 1970-01-01
    相关资源
    最近更新 更多