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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |