2014-10-03 3 views
-1

Я пытаюсь под кодом для проверки существования пользователя в базе данных и результата эха в соответствии с выходом. Но я получаю «Неустранимая ошибка: имя метода должно быть строкой в ​​......... .... строка ". Так, что не так в коде. Какие-либо предложения?Проверить базу данных для пользователя existance

<?php 

$user_email="[email protected]"; 


try 
{ 
    /*** connect to database ***/ 
    /*** mysql hostname ***/ 
    $mysql_hostname = '127.0.0.1'; 

    /*** mysql username ***/ 
    $mysql_username = 'root'; 

    /*** mysql password ***/ 
    $mysql_password = ''; 

    /*** database name ***/ 
    $mysql_dbname = 'something'; 


    /*** select the users name from the database ***/ 
    $dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username,  $mysql_password); 
} 
catch(PDOException $e) 
{ 
echo $e->getMessage(); 
} 



if ($this->$dbh()) { 
     // check if username or email already exists 
     $query_check_user_email = $this->$dbh->prepare('SELECT user_email FROM users   WHERE user_email=:user_email'); 
        $query_check_user_email->bindValue(':user_email', $user_email,  PDO::PARAM_STR); 
     $query_check_user_email->execute(); 
     $result = $query_check_user_email->fetchAll(); 

     // if username or/and email find in the database 
     // TODO: this is really awful! 
     if (count($result) > 0) { 
      echo "exists!"; 
      } 
     } else { 
      echo "non existant"; 
} 

?> 

Любое предложение?

+0

Оставьте номер строки, пожалуйста, и, если возможно, линию, поднимающую ошибку. –

+1

Покажите нам все сообщение об исключении. –

+0

что это? 'if ($ this -> $ dbh()) {'? просто отбросьте это, если блок – Ghost

ответ

0

$dbh должен быть использован вместо $this->dbh:

if ($dbh) { 
     // check if username or email already exists 
     $query_check_user_email = $dbh->prepare('SELECT user_email FROM users  
               WHERE user_email=:user_email'); 
     $query_check_user_email->bindValue(':user_email', 
              $user_email, PDO::PARAM_STR); 
     $query_check_user_email->execute(); 
     $result = $query_check_user_email->fetchAll(); 

     // if username or/and email find in the database 
     // TODO: this is really awful! 
     if (count($result) > 0) { 
      echo "exists!"; 
      } 
     } else { 
      echo "non existant"; 
} 
?> 
2

Первое:

$dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username,  $mysql_password); 

Это будет переменная в области вашего PHP блока/файл/что угодно. Фактически вы не устанавливаете его как члена, потому что вы не в классе.

Второй: $this->$dbh().

Вы не входите в метод класса. Существует нет $this, где находится ваш код.

Попробуйте использовать просто: $dbh

0

Может быть, это помогает

$stmt = $dbh->prepare("SELECT * FROM user WHERE user_email = :email;"); 
$stmt->bindParam(":email", $email); 
$stmt->execute(); 
$result = $stmt->fetchAll(PDO::FETCH_BOTH); 

кстати я предпочел бы называть пользователю таблицы вместо пользователей.

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