PDO页面中的错误在非对象上调用成员函数bindValue()

时间:2013-10-30 11:50:47

标签: php pdo bindvalue

我是PDO的新手。

我尝试在我的网站上创建一个登录页面,代码如下所示

<?php
     if(isset($_POST['username'])and isset($_POST['password']))
     { 

session_start();
$db = new PDO('mysql:host=localhost;dbname=hydra', 'root', '');

$username = $_POST['username'];
$password = $_POST['password'];

$query = $db->query("SELECT * FROM login where username=:username AND password=:password");
    $query->bindValue(":username", $username, PDO::PARAM_STR);
    $query->bindValue(":password", $password, PDO::PARAM_STR);
    $query->execute();

    if($query->rowcount() >0 )
    {
        echo "No Records Found!";
        header('Location: login.php');
    }
    else
    {
        $_SESSION['username'] = $_POST['username'];
        header("Location: home.php");

    }




           }
         ?>

尝试登录后,出现以下错误:  在非对象

上调用成员函数bindValue()

我的代码出了什么问题?

4 个答案:

答案 0 :(得分:0)

你必须使用prepare()而不是query()

您的代码也过于臃肿。

$stmt = $db->prepare("SELECT * FROM login where username=? AND password=?");
$stmt->execute([$_POST['username'], $_POST['password']]);

足够了 此外,您必须在连接

后添加此行
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

答案 1 :(得分:0)

PDO::query返回值失败时为PDOStatement对象或FALSE

在您的情况下发生了失败,返回的值为FALSE,而不是PDOStatement对象。

var_dump之后立即使用$query = $db->query(...以确保您收到错误。并使用PDO错误检查来找出错误消息是什么。

答案 2 :(得分:0)

试试这样:

$stmt = $db->prepare("SELECT * FROM login WHERE username=:username AND password=:password");
    $stmt->bindValue(":username", $username, PDO::PARAM_STR);
    $stmt->bindValue(":password", $password, PDO::PARAM_STR);
    $stmt->execute();

您必须通过$stmt创建一个声明($db->prepare("sql"))而不是查询。然后,您可以将params绑定到预准备语句并执行它。

答案 3 :(得分:0)

尝试使用prepare()方法而不是query()

```

$query = $db->prepare("SELECT * FROM login where username=:username AND password=:password");

$query->bindValue(":username", $username, PDO::PARAM_STR);
$query->bindValue(":password", $password, PDO::PARAM_STR);
$query->execute();

```