2

我终于吸取了教训,转而使用 PDO。

现在我有很多疑问,但我正在努力解决这个问题。它应该在登录期间获取个人 user_salt。

function getsalt($email) {
    $sql = "SELECT    *
                FROM users
                WHERE email = '$email'
                LIMIT 1";

    foreach ($db->query($sql) as $row);

    print_r( $row['salt']);
};

显然我只想要一个记录,无论如何只会有一个匹配的记录,但这会导致调用时出现白屏死机。

我肯定错过了什么。

4

2 回答 2

3

不需要foreach你使用的。

同样正如其他人指出的那样,您应该使用准备好的语句。

您还应该确保检查数据库查询的结果是否真的成功。

function getsalt($email) {
    $sql = "SELECT      salt
                FROM    users
                WHERE   email = ':email'
                LIMIT   1";

    $stmt = $db->prepare($sql);
    if($stmt === FALSE)
        return(FALSE);

    $stmt->bindParam(':email', $email);
    $stmt->execute();
    $salt = $stmt->fetchColumn();

    print_r( $salt );
}

如果:

  • 您的查询没有参数(简单的选择或创建/更改);
  • 您不想检查数据库查询是否成功;
  • 你真的很想写一个查询作为单行;

你可以:

foreach($pdo->query('SHOW TABLES')->fetchAll() AS $row) print_r($row);
于 2012-06-29T18:20:46.333 回答
1

您可能会在query(). 您需要像下面那样检查它。

如果有任何错误,此函数将返回false,如果一切顺利,则返回盐:

function getSalt($email) {
    $sql = "SELECT salt FROM users WHERE email = '$email'"; 
    $resultSet=$db->query($sql);
    if (!$resultSet) return false;
    return $resultSet->fetchColumn(); 
};

为避免 SQL 注入攻击,请务必$email在将其传递给函数之前验证其格式。

于 2012-06-29T18:21:47.483 回答