在数据库中使用PDO预处理语句检查是否有任何结果

时间:2015-05-18 13:39:27

标签: php mysql pdo

<?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");

            }
        }

    }





    ?>

1 个答案:

答案 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的功能。这是两个不同的接口库。

以纯文本格式存储密码是一个非常糟糕的主意。