加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – PDO :: FETCH_ASSOC返回false

发布时间:2020-12-13 15:55:10 所属栏目:PHP教程 来源:网络整理
导读:这是一个应该在DB中搜索用户的脚本.我将此脚本分为4个文件:login.class.php,userLookup.php,userLookupDisplay.tpl.php和userLookup.tpl.php. 这些文件中的代码如下: login.class.php :(这不是整个类,为了便于阅读,我把大部分课程都删掉了) class login{ p
这是一个应该在DB中搜索用户的脚本.我将此脚本分为4个文件:login.class.php,userLookup.php,userLookupDisplay.tpl.php和userLookup.tpl.php.

这些文件中的代码如下:

login.class.php :(这不是整个类,为了便于阅读,我把大部分课程都删掉了)

class login
{
    public function userLookup($email = null,$first_name = null,$last_name = null)
    {
        $where = "";
        $execute = "";
        if(!is_null($email) && !empty($email))
        {
            $where .= "email = :email";
            $execute = array(':email' => $email);
        }

        if(!is_null($first_name) && !empty($first_name))
        {
            $where .= "first_name = :firstName";
            $execute = array(':firstName' => $first_name);
        }

        if(!is_null($last_name) && !empty($last_name))
        {
            $where .= "last_name = :lastName";
            $execute = array(':lastName' => $last_name);
        }

        if (!empty($where))
        {
        $query =$this->_db->prepare("SELECT id,email,first_name,last_name FROM users WHERE " . $where);
        $query->execute($execute);
        return $query->fetch(PDO::FETCH_ASSOC);
        var_dump($query);
        var_dump($execute);
        }

        elseif(empty($where))
        {
            echo "Please enter at least one search criteria";
        }
    }   
}

userLookup.php:

session_start();

require_once('inc/config.php');
require_once($loginClassPath);

if (!empty($_SESSION['user_id']) && $_SESSION['role'] == 2)
{
        include('inc/dbConnect.php');
        if ($pdo)
        {
            $loginClass = new login($pdo);
            $userData = null;

            if (isset($_POST['submit']))
            {
                $firstName = $_POST['first_name'];
                $lastName = $_POST['last_name'];
                $email = $_POST['email'];
                $userData = $loginClass->userLookup($email,$firstName,$lastName);
                var_dump($userData);
            }

            if (!is_null($userData))
            {
                include($userLookupDisplayTpl);
            }
            else
            {
                include($userLookupTpl);
            }
        }
}
else
{
    header('Location: accessDenied.php');
    die();
}

userLookup.tpl.php:

<html>
<head>

<title>View Users</title>
</head>
<body>

<div style="text-align:center;">
        <form method="POST" action="<?= $_SERVER['SCRIPT_NAME']; ?>">
            <? var_dump($userData); ?>
            First Name: <input type="text" name="first_name" value=""/><br>
            Last Name: <input type="text" name="last_name" value=""/><br>
            Email: <input type="text" name="email" value=""/><br>            
            <input type="submit" name="submit" value="Get User"/>
        </form>
</div>

</body>
</html>

userLookupDisplay.tpl.php:

<html>
<head>

<title>View Users</title>
</head>
<body>

<div style="text-align:center;">
    <? var_dump($userData); ?>
    <? echo $userData['id']; ?>
    <? echo $userData['first_name']; ?>
    <? echo $userData['last_name']; ?>
    <p>Return</p>
</div>

</body>
</html>

我遇到的问题是$userData(在userLookup.php中)保持返回布尔值false而没有任何错误.基于var_dump它看起来像查询本身正在构造正确所以我无法弄清楚它为什么返回false?任何和所有的帮助表示赞赏.先谢谢你们!另外,如果您需要更多信息,请与我们联系.

解决方法

在你的login.class.php中,你覆盖了你的数组$execute,你需要一些条件,如你的WHERE子句的AND或OR,将你的代码更改为:

$where = array();
    $execute = array();

    if(!is_null($email) && !empty($email))
    {
        $where[] = "email = :email";
        $execute[':email'] = $email;
    }

    if(!is_null($first_name) && !empty($first_name))
    {
        $where[] = "first_name = :firstName";
        $execute[':firstName'] = $first_name;
    }

    if(!is_null($last_name) && !empty($last_name))
    {
        $where[] = "last_name = :lastName";
        $execute[':lastName'] = $last_name;
    }

    if (count($where) > 0)
    {

    $where = implode(' AND ',$where);

    $query =$this->_db->prepare("SELECT id,last_name FROM users WHERE " . $where);
    $query->execute($execute);
    return $query->fetch(PDO::FETCH_ASSOC);
    var_dump($query);
    var_dump($execute);
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读