我是PDO的新手,我需要帮助完成我的login.php的其余代码块,有人可以帮我解决一下吗?
<h1>Login</h1>
<form action="" method="POST">
<input type="text" name="username" placeholder="username"><br />
<input type="password" name="password" placeholder="password">
<input type="submit">
</form>
<?php
if(isset($_POST['username'], $_POST['password'])){
try{
$username = 'root';
$password = '';
$conn = new PDO("mysql:host=localhost;dbname=lr;", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$result->execute($query);
} catch(PDOException $e){
echo 'ERROR', $e->getMessage();
}
}
?>
答案 0 :(得分:0)
prepare语句返回一个对象,可以执行该对象。因此$ query-&gt; execute() - 执行的第一个参数可以是一个数组。或者,您可以首先在同一个$ query对象上使用bindParam函数,而不是传递数组。
无论如何,你在这里:
<?php
if(isset($_POST['username'], $_POST['password'])){
try{
$username = 'root';
$password = '';
$conn = new PDO("mysql:host=localhost;dbname=lr;", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$result = $query->execute(array(':username' => $_POST['username'], ':password' => $_POST['password']));
} catch(PDOException $e){
echo 'ERROR', $e->getMessage();
}
}
?>
编辑:让应用程序使用您的根数据库用户也是非常糟糕的做法。从长远来看,您应养成为用户提供特定数据库权限的习惯。假设一个用户只拥有一个数据库的完全权限。