2015-01-12 3 views
1

У меня есть 2 метода обратного вызова, которые я использую для проверки ввода пользователя, который проверяет, существует ли почта в БД и другое, чтобы проверить, существует ли пользователь. Моя электронная почта работает отлично, однако имя пользователя NEVER выполняется правильно (так как оно никогда не возвращает пользователя).PHP обратный вызов MySQL никогда не возвращает значение

Код имени пользователя обратного вызова

// username check in DB 
    private function username($username, $fieldname){ 
     $username = mysql_real_escape_string ($username); 
     if(strlen ($username) > 3 && strlen ($username) <= 25){ 
      $sql = "SELECT username FROM pre_reg WHERE username =:username UNION SELECT username FROM personal WHERE username =:username"; 
      try{ 
       $query = $this->pdo->prepare($sql); 
       $query->bindParam(':username', $username, PDO::PARAM_STR); 
       $query->execute(); 
       $user = $query->fetch(); 
       if($user){ 
        $this->errors[] = 'Please try a different username!'; 
        return FALSE; 
       }else{ 
        $this->username = $username; 
        return TRUE; 
       } 
      }catch (PDOException $e){ 
       $e->getMessage(); // Store to file 
      } 
     } 
     return FALSE; 
    } 

же код, который проверяет электронную почту, которая работает отлично

//email check 
    private function email($email, $fieldname){ 
     $valid = filter_var($email, FILTER_VALIDATE_EMAIL); 
     if(!$valid){ 
      $this->errors[] = "We find your entery to be an invalid email address!"; 
     } 
     if($valid && strlen($email) <= 40){ 
      $email = mysql_real_escape_string ($email); 
      $sql = "SELECT email FROM pre_reg WHERE email =:email UNION SELECT email FROM personal WHERE email=:email"; 
      try{ 
       $query = $this->pdo->prepare($sql); 
       $query->bindParam(':email', $email, PDO::PARAM_STR); 
       $query->execute(); 
       $user = $query->fetch(); 
       if($user){ 
        $this->errors[] = 'Please try a different email address!'; 
        return FALSE; 
       } 
      }catch (PDOException $e){ 
       echo $e->getMessage(); // Store to file 
      } 

     } 
     $this->email = $email; 
     return TRUE; 
    } 

Это, как я называю их

// Validate all the data 
    public function validate($data, $rules){ 
     $valid = TRUE; 
     foreach($rules as $fieldname => $rule){ 
      $callbacks = explode('|', $rule); 
      foreach($callbacks as $callback){ 
       $value = isset($data[$fieldname]) ? $data[$fieldname] : NULL; 
       if($this->$callback($value, $fieldname) == FALSE){ 
        $valid = false; 
       } 
      } 
     } 
+1

Почему вы используете функции mysql в PDO? – Neat

+0

Я решил это, как только я понял, как печатать ошибки, чтобы увидеть, что происходит. Я ссылался на неправильную таблицу в своем SQL-заявлении, и она рушилась, но я не мог ее увидеть – theStudent

ответ

0

шаги я взял ее решить:

эхо это заявление

catch (PDOException $e){ 
    $e->getMessage(); // Store to file 
} 

Он показал мне, что не было COLUMN в таблице после того, как я wen't и посмотрел на мое заявление, я понял, что я вызывая неправильную таблицу здесь:

UNION SELECT username FROM personal WHERE username =:user" 

Я пытался на самом деле назвать:

UNION SELECT username FROM users WHERE username =:user" 

Причина, по которой я получил эту ошибку, заключается в том, что я скопировал код из функции электронной почты и забыл изменить таблицу. Имейте это в виду в следующий раз!

Спасибо за помощь!

Смежные вопросы