2016-11-24 15 views
-2

Я пытаюсь проверить, существует ли $ email в моей базе данных. Я на 100% уверен, что электронная почта еще не была зарегистрирована, но счет ($ results) возвращает 1 и $ results ['email'] возвращает пустую строку.Запрос на подтверждение, если электронная почта уже существует в базе данных; Количество строк возвращает 1 вместо 0

Я рассмотрел другие примеры того, как закодировать запрос к базе данных. Мне это нравится, поэтому я не пробовал по-другому его кодировать.

В моей базе данных У меня есть только 1 зарегистрированный адрес электронной почты и отличается от $ email.

Контекст: Использование Netbeans, XAMPP, MySQL Workbench

 $records = $conn->prepare('SELECT * FROM users WHERE email = :email'); 
    $records->bindParam(':email',$email); 
    $records->execute(); 
    $results = $records->fetch(PDO::FETCH_ASSOC); 

    IF(count($results) == 0){ 

    .... 
+1

Вы пробовали распечатать то, что вы выбрали, и * смотреть на выход *? –

+1

* "и' $ results ['email'] 'возвращает пустую строку." * - где это? –

+1

* «В моей базе данных у меня есть только 1 зарегистрированная электронная почта, и она отличается от $ email.» * - А? Итак, какова ценность этой строки и '$ email'? –

ответ

1

Я думаю, что переменные $ результат неверен.

Таким образом, подсчет ($ result) является счетом (false) - это 1 .. девиз истории не использует счет.

Ваш код должен быть примерно таким.

$records = $conn->prepare('SELECT * FROM users WHERE email = :email'); 
$records->bindParam(':email',$email); 
$records->execute(); 
$results = $records->fetch(PDO::FETCH_ASSOC); 

/* Check with */ 
if ($result === false) { 
// Email doesn't exists 
} 

/* Or check with */ 
if (!is_array($result)) { 
    // Email doesn't exists 
} 
+0

Это сработало отлично! Мне php/sql все еще что-то я новичок. @Mayank разъяснил, почему это работает. –

1

Просто для ясности, как сделать ваш код менее раздутым

$stmt = $conn->prepare('SELECT 1 FROM users WHERE email = ?'); 
$stmt->execute([$email]); 
$emailFound = $stmt->fetchColumn(); 

if($emailFound) { 
+0

Я новичок в этом. Я узнал, что то, что я делаю, было лучшей практикой. Но опять же, у меня также были две переменные: электронная почта и $ email, названные почти одинаковыми, и это могло вызвать путаницу. –

+0

Тогда это просто ненадежный источник, где вы это узнали. –

0

Поскольку пустой массив является ложным значением вы можете просто проверить его.

$records = $conn->prepare('SELECT * FROM users WHERE email = :email'); 
$records->bindParam(':email',$email); 
$records->execute(); 
$results = $records->fetch(PDO::FETCH_ASSOC); 
if(!$results) echo 0; 

или

if($results->rowCount() == 0){} 
+0

Я пробовал последний, но это не сработало. Не знаю, почему. В любом случае, спасибо! –

0

Моя ошибка была я использую это:

if(count($results) == 0){ ... 

, чтобы проверить, есть ли какие-либо записи. Вы можете просто использовать приведенный ниже код. Причина в том, что результат $ уже возвращал «false», а технически я считал логическое значение.

IF($result === false){ ...