创建登录系统php时出错


Error creating login system php

我一直在尝试创建一个php登录系统,但我无法使其正常工作,因为如果我尝试使用有效的用户名和密码登录,它会说"失败"。我以前用过这种技术,而且很成功,但这次我不能用了。

代码:

<?php
$username=$_POST['username'];
$password=$_POST['password'];

$conn = new PDO("mysql:host=localhost;dbname=login" ,'root','');
if (!$conn){
    die("Not connected". mysqli_connect_error());
}else {
    echo "Connection sucessfull";
    echo "</br>";

}
$sql = "select * from details where Username=$username and Password=$password";
$stmt=$conn->prepare($sql);
$stmt->bindparam("Username",$username,PDO::PARAM_STR);
$stmt->bindparam("Password",$password,PDO::PARAM_STR);
$stmt->execute();
$num = $stmt->rowCount();

if ($num>0){
    echo "You are logged in";
}else {
    echo "fail";
}

感谢

您的语句应该是这样的:

$stmt= $conn->prepare("SELECT * FROM `details` 
                        WHERE `Username`=:username AND `Password`=:password");
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->execute();

注:

根据php.net,PDOStatement::rowCount()返回受上次执行的DELETE、INSERT或UPDATE语句影响的行通过相应的PDOStatement对象。

因此,为了计算select语句返回的行数,可以使用fetchAll():

if (count($stmt->fetchAll()) > 0) {
   echo "You are logged in";
}else {
   echo "fail";
}

用于设置智能PDO连接:

  try {
        $db_host = '';//  hostname
        $db_name = '';//  databasename
        $db_user = '';//  username
        $user_pw = '';//  password
        $conn = new PDO('mysql:host='.$db_host.'; dbname='.$db_name, $db_user, $user_pw);  
        $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $conn->exec("SET CHARACTER SET utf8");
    }catch (PDOException $err) {  
        echo "harmless error message if the connection fails";
        $err->getMessage() . "<br/>";
        file_put_contents('PDOErrors.txt',$err, FILE_APPEND);//log errors  
        die();  //  terminate connection
    }

我已经格式化了您的代码,现在应该可以工作了。不能将mysqli_*与PDO混合使用。

$conn = new pdo("mysql:host=localhost;dbname=login;", 'root', '');
if ($conn->connect_error) {
    die("Not connected" . $conn->connect_error);
} 
echo "Connection successful<br/>";
$sql= "select * from details where Username=:username and Password=:password";
$result = $connection->prepare($sql);
$result->bindParam(":username" ,$_POST['username']);
$result->bindParam(":password" ,$_POST['password']);
$result->execute();
$num=$result->fetchColumn();
if($num > 0){
    header("location:index.php");
}else{
    header("location:login.php");
}