我的印象是这是一个准备好的声明脚本,但看起来我错了。我该怎么把它变成一个呢?什么是准备好的声明?
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT Status FROM Users WHERE Username = ? AND Password = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $_GET['username'], $_GET['password']);
$stmt->execute();
$result = $stmt->get_result();
$rows = $result->fetch_all(MYSQLI_ASSOC);
if ($result->num_rows > 0) {
// output data of each row or remove while loop if you wish
while($row = $result->fetch_assoc()) {
echo "<b style='color:green'>Found</b>";
}
} else {
echo "0 results";
}
$conn->close();
?>
答案 0 :(得分:1)
那不是使用准备好的陈述。这是一个没有错误/结果检查的基本示例: -
$sql = "SELECT Status FROM Users WHERE Username = ? AND Password = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $_GET['username'], $_GET['password']);
$stmt->execute();
$result = $stmt->get_result();
$rows = $result->fetch_all(MYSQLI_ASSOC);
但是,您应该考虑仅选择用户名并检索密码进行比较。如果您不这样做,也应该在数据库中哈希密码。使用php的password_hash()
和password_verify()
。前者有助于散列密码,而后者则用于验证来自html表单或原始来源的发布密码是否与散列密码匹配
语法是
password_hash($_GET['password'], PASSWORD_DEFAULT);
password_verify($_GET['password'], $hashedPasswordFromDatabase);
确保存储密码的列至少为varchar(60)
。