SELECT 在数据库中使用 PDO 准备语句检查是否有任何结果

SELECT with PDO prepared statements within Database check if there are any results

<?php

//我想做一个登录页面

//This my logon.php 它从我的 login.php 获取数据并检查 (username,password)given 是否存在于我的数据库中,如果存在,它允许您继续查看我的 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);

//这里我尝试检查我的数据库是否存在给定的用户名和密码 并以某种方式检查我是否有任何 results.if 我有 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");

            }
        }

    }





    ?>

这两行乱七八糟的:

$pdo->prepare$sql=('SELECT * FROM members WHERE username = :username and password = :password' );
$pdo->execute(array(':username' => $username, ':password'=>$password));

首先,我们没有看到您创建了 PDO 连接。有一个 mysqli 连接。选择 PDO 或 mysqli,你不能混合使用两个库中的函数。

PDOpreparefunction/methodreturns一个语句对象PDOStatement.

PDOstatement 对象有一个 execute function/method。

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

如果你想知道查询是否 returns 一行,你可以简单地从中获取,并测试它是否 returns FALSE。

$row = $sth->fetch(PDO::FETCH_ASSOC);

这一行:

mysqli_num_rows($result);

$result 尚未分配值。同样,您不能混合使用 PDO 和 mysqli 的函数。那是两个不同的界面库。


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