我是PDO的新手。
我尝试在我的网站上创建一个登录页面,代码如下所示
<?php
if(isset($_POST['username'])and isset($_POST['password']))
{
session_start();
$db = new PDO('mysql:host=localhost;dbname=hydra', 'root', '');
$username = $_POST['username'];
$password = $_POST['password'];
$query = $db->query("SELECT * FROM login where username=:username AND password=:password");
$query->bindValue(":username", $username, PDO::PARAM_STR);
$query->bindValue(":password", $password, PDO::PARAM_STR);
$query->execute();
if($query->rowcount() >0 )
{
echo "No Records Found!";
header('Location: login.php');
}
else
{
$_SESSION['username'] = $_POST['username'];
header("Location: home.php");
}
}
?>
尝试登录后,出现以下错误: 在非对象
上调用成员函数bindValue()我的代码出了什么问题?
答案 0 :(得分:0)
你必须使用prepare()而不是query()
您的代码也过于臃肿。
$stmt = $db->prepare("SELECT * FROM login where username=? AND password=?");
$stmt->execute([$_POST['username'], $_POST['password']]);
足够了 此外,您必须在连接
后添加此行$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
答案 1 :(得分:0)
PDO::query
返回值失败时为PDOStatement
对象或FALSE
。
在您的情况下发生了失败,返回的值为FALSE
,而不是PDOStatement
对象。
在var_dump
之后立即使用$query = $db->query(...
以确保您收到错误。并使用PDO错误检查来找出错误消息是什么。
答案 2 :(得分:0)
试试这样:
$stmt = $db->prepare("SELECT * FROM login WHERE username=:username AND password=:password");
$stmt->bindValue(":username", $username, PDO::PARAM_STR);
$stmt->bindValue(":password", $password, PDO::PARAM_STR);
$stmt->execute();
您必须通过$stmt
创建一个声明($db->prepare("sql")
)而不是查询。然后,您可以将params绑定到预准备语句并执行它。
答案 3 :(得分:0)
尝试使用prepare()方法而不是query()
```
$query = $db->prepare("SELECT * FROM login where username=:username AND password=:password");
$query->bindValue(":username", $username, PDO::PARAM_STR);
$query->bindValue(":password", $password, PDO::PARAM_STR);
$query->execute();
```