PHP PDO基本方程vs对象和数组

时间:2012-06-29 18:14:11

标签: php pdo

我终于吸取了教训,转而使用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']);
};

显然我只需要一条记录,但是只有一条匹配的记录,但这会导致白屏死机。

我一定错过了什么。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

您可能会在query()上收到错误消息。你需要检查它如下。

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

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

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