小编典典

准备语句是否可以保护您的数据库?

sql

我知道有些人可能会回答这个问题,但是我的问题来自于您和您的答案。我正在阅读有关SQL注入以及如何保护数据库的过去两个小时的问答。我看到的大量网页和教程也是如此。

我发现有一半人声称prepare语句确实可以保护您的数据库,而另外50人则声称不是。

另一方面,我读到mysql_real_escape_string可以完成这项工作,而其他人则说不行。

我的问题是谁相信?

另外,这是适当的准备声明吗?

$stmt = $dbh->prepare("SELECT phpro_user_id, phpro_username, phpro_password FROM phpro_users 
                    WHERE phpro_username = :phpro_username AND phpro_password = :phpro_password");

        /*** bind the parameters ***/
        $stmt->bindParam(':phpro_username', $phpro_username, PDO::PARAM_STR);
        $stmt->bindParam(':phpro_password', $phpro_password, PDO::PARAM_STR, 40);

        /*** execute the prepared statement ***/
        $stmt->execute();

阅读 43

收藏
2021-04-07

共1个答案

小编典典

准备好的语句则没有。绑定参数可保护语句(而不是整个数据库)的安全,只要所有不可信数据都通过参数传递而不是插值到语句中即可。当人们使用准备好的语句时,他们几乎总是也使用绑定的参数,因此这两个名称通常会混合在一起。

  1. 准备陈述
  2. 以变​​量作为附加参数的运行语句

mysql_real_escape_string 几乎总是可以完成这项工作,但是由于它在流程中增加了其他步骤,因此更容易出现人为错误。

  1. 转义 每个 变量
  2. 将变量连接到SQL语句
  3. 运行语句
2021-04-07