Php 尝试使用PDO根据数据库检查用户

Php 尝试使用PDO根据数据库检查用户,php,mysql,class,pdo,Php,Mysql,Class,Pdo,您好,我正在尝试在用户提交登录表单后检查其用户名和密码,以使用PDO检查其是否存在于数据库中,但返回false 以下是我正在使用的代码: <?php //import all of the available functions require_once('func/functions.php'); //create a connection to the database $database = new database('localhost', 'root', 'usbw'); $

您好,我正在尝试在用户提交登录表单后检查其用户名和密码,以使用PDO检查其是否存在于数据库中,但返回false

以下是我正在使用的代码:

<?php 
//import all of the available functions
require_once('func/functions.php');

//create a connection to the database
$database = new database('localhost', 'root', 'usbw');
$database->connect();
$database->select('mjbox');

//Check if the user is logged in
loggedin();


//Check if the submit button has been clicked first
if ( isset( $_POST['submit'] ) ){
    //Check if user exists on database
    match_login($_POST['username'],$_POST['password']);
}
?>

//Check if user is logged in
function loggedin(){
    //Check if the loggedin status is set to true, meaning that user is logged in.
    if ( isset ( $_SESSION['loggedin'] ) && $_SESSION['loggedin'] == true  ) {
        echo '<p>Hello '. $_SESSION['username'] . ', <a href="Logout.php">Logout.</a></p>';
    }else{
        //If the user is not logged in display a login form
        echo '<form action="index.php" method="post">';
        echo '<input type="text" name="username">';
        echo '<input type="text" name="password">';
        echo '<input type="submit" name="submit" value="submit">';
        echo '<form>';
    }

}

//Check users login details
function match_login($username, $password){
        //If the button has been clicked get the variables
        $dbh = new PDO("mysql:host=localhost;dbname=mjbox","root", "usbw");
        $stmt = $dbh->prepare("SELECT * FROM mjbox WHERE username=':name' AND password=':pword'");
        $stmt->bindParam(":name", $_POST['username']);
        $stmt->bindParam(":pword", $_POST['password']);
        $stmt->execute();

        if( $stmt->rowCount() > 0 ){

            echo 'There is a match!';
        }else{
            echo 'nooooo';
        }
}

//检查用户是否已登录
函数loggedin(){
//检查loggedin状态是否设置为true,表示用户已登录。
如果(isset($\u会话['loggedin'])&&$\u会话['loggedin']==true){
回显“Hello”。$\u会话['username']”,

; }否则{ //如果用户未登录,则显示登录表单 回声'; 回声'; 回声'; 回声'; 回声'; } } //检查用户登录详细信息 函数匹配\u登录($username,$password){ //如果已单击按钮,则获取变量 $dbh=newpdo(“mysql:host=localhost;dbname=mjbox”、“root”、“usbw”); $stmt=$dbh->prepare(“从mjbox中选择*,其中username=':name'和password=':pword'”; $stmt->bindParam(“:name”,$\u POST['username']); $stmt->bindParam(“:pword“,$\u POST['password']); $stmt->execute(); 如果($stmt->rowCount()>0){ echo‘有火柴!’; }否则{ 回声“nooooo”; } }
这是我第一次尝试使用PDO,我是否正确使用了它?所有的细节看起来都是正确的,并且用户存在于数据库中,因此无法理解为什么它不返回true。
谢谢

在PDO中绑定字符串会自动为您添加引号。只需删除查询中:name和:pword周围的引号,就可以解决问题。

不一定返回您想要的值,您应该
选择COUNT(*)
,然后使用
PDOStatement::fetchColumn
获得结果,就像
rowCount
的文档建议您这样做。其他一些问题:使用