<?php
//我想创建一个登录页面
//这是我的logon.php,它从我的login.php获取数据并检查我的数据库中是否存在(用户名,密码),如果存在,它允许您继续查看我的index.php。
//我想用PDO准备好的语句来做。
//这是我与数据库的连接
$db_host="localhost";
$db_username="root";
$db_pass="";
$db_name="admin";
$db=new mysqli("$db_host","$db_username","$db_pass","$db_name");
echo $db->connect_errno;
if($db->connect_errno){
die("sorry we have some problems");
}
if($_SERVER ['REQUEST_METHOD']=='POST'){
$username=$_POST['username'];
$password=$_POST['password'];
$username=htmlspecialchars($username);
$password=htmlspecialchars($password);
//这里我尝试检查我的数据库是否存在给定的用户名和密码 并以某种方式检查我是否有任何结果。如果我有1,2,3 ...行匹配用户名和密码
//这就是我想用PDO做的事情......请帮忙!
$pdo->prepare$sql=('SELECT * FROM members WHERE username = :username and password = :password' );
$pdo->execute(array(':username' => $username, ':password'=>$password));
//如果我从我的数据库中得到任何结果,这就是我想要做的事情
if($result){
$num_rows=mysqli_num_rows($result);
if($num_rows>0){
session_start();
$_SESSION['check']="1";
header ("Location:index.php");
}
else{
session_start();
$_SESSION['check']="";
header ("Location:index.php");
}
}
}
?>
答案 0 :(得分:0)
这两行是一团糟:
$pdo->prepare$sql=('SELECT * FROM members WHERE username = :username and password = :password' );
$pdo->execute(array(':username' => $username, ':password'=>$password));
首先,我们没有看到您创建了PDO连接。有一个mysqli连接。选择PDO或mysqli,你不能混合两个库中的函数。
PDO prepare
函数/方法返回一个语句对象PDOStatement
。
PDOstatement
对象具有execute
函数/方法。
try {
$pdo = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$sql = "select ... ";
$sth=$pdo->prepare($sql);
$sth->execute(...);
您可能需要查看文档中的示例,例如
http://php.net/manual/en/pdostatement.execute.php
如果你想知道查询是否返回一行,你可以简单地从中获取,并测试它是否返回FALSE。
$row = $sth->fetch(PDO::FETCH_ASSOC);
这一行:
mysqli_num_rows($result);
$result
尚未分配值。同样,你不能混合PDO和mysqli的功能。这是两个不同的接口库。
以纯文本格式存储密码是一个非常糟糕的主意。