2015-04-04 134 views
4

這是一個腳本,用於搜索數據庫中的用戶。我將這個腳本分成4個文件:login.class.php,userLookup.php,userLookupDisplay.tpl.php和userLookup.tpl.php。PDO :: FETCH_ASSOC返回false

的代碼在這些文件如下:

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)保持返回boolean false沒有任何錯誤。基於var_dumps它看起來像查詢本身正在構建,所以我不明白爲什麼它返回false?任何和所有的幫助表示讚賞。在此先感謝你們!另外,讓我知道你是否需要更多信息。

+0

不應該有一些'和'S之間那個'$ where'變量中的語句? – adeneo 2015-04-04 04:35:32

回答

1

在你login.class.php你重寫你的陣列$execute,你需要像一個ANDOR一些條件,你WHERE條款,更改代碼:

$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, email, first_name, last_name FROM users WHERE " . $where); 
    $query->execute($execute); 
    return $query->fetch(PDO::FETCH_ASSOC); 
    var_dump($query); 
    var_dump($execute); 
    }