我终于吸取了教训,转而使用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']);
};
显然我只需要一条记录,但是只有一条匹配的记录,但这会导致白屏死机。
我一定错过了什么。
答案 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
传递给函数之前验证其格式。