【问题标题】:how to acces super variable $_POST in PDO如何在 PDO 中访问超级变量 $_POST
【发布时间】:2015-04-24 12:57:17
【问题描述】:

在我的 PDO 语句中,我使用以下方法将数据插入 SQL:

//insert into database with a prepared statement
            $stmt = $db->prepare('INSERT INTO members (username,password,email,active) VALUES (:username, :password, :email, :active)');
            $stmt->execute(array(
                ':username' => $_POST['username'],
                ':password' => $hashedpassword,
                ':email' => $_POST['email'],
                ':active' => $activasion
            ));

我的问题是我收到一条警告消息说Dont Access superglobal variable $_post directly

在 google 之后我找到了这个解决方案 filter_input(INPUT_POST, 'var_name') 而不是 $_POST['var_name']

但这是给PHP

PDO有什么方法可以替换PDO中的$_POST$_GET吗?

【问题讨论】:

  • 您是否尝试将帖子值存储在变量中?
  • 你有什么理由不能像它建议的那样做$var = $_POST['something']。通常,您不希望在任何类型的数据库请求中使用超全局变量,因为它可以打开一罐蠕虫。
  • soooo....是什么阻止你使用filter_input(INPUT_POST, 'var_name')...???
  • 什么是反对票?糟糕的编码或糟糕的问题或糟糕的编码器?如果问题不好,您应该始终投反对票。
  • "但这是为 PHP 准备的"sureee...

标签: php pdo


【解决方案1】:

PDO 不是另一种语言。它是一个用于连接和操作数据源的 PHP 扩展。

您可以使用filter_input(INPUT_POST, 'username'),而您的代码没有问题。

        $stmt = $db->prepare('INSERT INTO members (username,password,email,active) VALUES (:username, :password, :email, :active)');
        $stmt->execute(array(
            ':username' => filter_input(INPUT_POST, 'username'),
            ':password' => $hashedpassword,
            ':email' => filter_input(INPUT_POST, 'email'),
            ':active' => $activasion
        ));

这应该可以正常工作,但我不明白为什么你不能直接访问$_POST,这不会有问题。

【讨论】:

  • @lawrence 你试过了吗???我认为您需要阅读PDO 是什么。您似乎认为这是一种不同的语言。
【解决方案2】:

filter_input(INPUT_POST, 'username') 而不是 $_POST['username'] 应该可以工作。

【讨论】:

  • 这个方法是PHP我问的是PDO
  • 但是 PDO 是 PHP。它是用于数据库访问的 PHP 库。
【解决方案3】:

在变量中使用 $_POST 值

$stmt = $db->prepare('INSERT INTO members (username,password,email,active) VALUES (:username, :password, :email, :active)');
$username = $_POST['username'];
$email = $_POST['email'];
        $stmt->execute(array(
            ':username' => $username,
            ':password' => $hashedpassword,
            ':email' => $email, 
            ':active' => $activasion
        ));

【讨论】:

  • 这和他已经使用的代码没有真正的区别吗?您只是暂时将其保存到不同的变量中。
  • @lshas - 没错,传递的值没有真正的区别,唯一的区别是 PDO 不会因为在执行语句中包含超全局变量而发出警告,这毕竟是问题!
  • 该代码仍然存在安全漏洞。而且 PDO 警告不仅仅是为了好玩 ;)
  • @adeneo PDO 如何知道变量是否被直接访问?无论如何,execute 方法只会传递结果数组?
  • @lshas - 我不知道,但它发出警告 Dont Access superglobals directly 它显然知道。
猜你喜欢
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2020-03-28
  • 2019-03-17
  • 2022-11-21
  • 2015-09-25
  • 1970-01-01
相关资源
最近更新 更多