2013-07-04 3 views
0

Я использую следующий код, который не работает для меня.Как проверить, существует ли пользователь в MySQL с PHP

$con=mysqli_connect("localhost","root","","my_db"); 
$check="SELECT COUNT(*) FROM persons WHERE Email = '$_POST[eMailTxt]'"; 
if (mysqli_query($con,$check)>=1) 
{ 
    echo "User Already in Exists<br/>"; 
} 
else 
{ 
    $newUser="INSERT INTO persons(Email,FirstName,LastName,PassWord) values('$_POST[eMailTxt]','$_POST[NameTxt]','$_POST[LnameTxt]','$_POST[passWordTxt]')"; 
    if (mysqli_query($con,$newUser)) 
    { 
     echo "You are now registered<br/>"; 
    } 
    else 
    { 
     echo "Error adding user in database<br/>"; 
    } 
} 

Объект класса mysqli_result не может быть преобразован в целом в C: \ XAMPP \ HTDOCS \ Exp \ welcome.php

+5

http://en.wikipedia.org/wiki/SQL_injection – Hamish

+0

mysqli_query должен вернуться набор результатов, одним из элементов которого будет столбец. Это значение столбца, которое вы хотите проверить, чтобы оно было больше или равным 1, а не самому результату. – Kickstart

ответ

5

этот код отлично подходит для вас работает ...

$con=mysqli_connect("localhost","root","","my_db"); 
$check="SELECT * FROM persons WHERE Email = '$_POST[eMailTxt]'"; 
$rs = mysqli_query($con,$check); 
$data = mysqli_fetch_array($rs, MYSQLI_NUM); 
if($data[0] > 1) { 
    echo "User Already in Exists<br/>"; 
} 

else 
{ 
    $newUser="INSERT INTO persons(Email,FirstName,LastName,PassWord) values('$_POST[eMailTxt]','$_POST[NameTxt]','$_POST[LnameTxt]','$_POST[passWordTxt]')"; 
    if (mysqli_query($con,$newUser)) 
    { 
     echo "You are now registered<br/>"; 
    } 
    else 
    { 
     echo "Error adding user in database<br/>"; 
    } 
} 
+1

Это может вызвать уведомления. Если запись не найдена, данные не являются массивом. Может быть исправлено путем замены назначения на данные и проверки данных [0] на _IF ($ data = mysqli_fetch_array ($ rs, MYSQLI_NUM)) {_ – Kickstart

+1

спасибо Kickstart за ценную точку. – Vijay

+0

'$ _POST [eMailTxt]' shoud be '$ _POST ['eMailTxt']' – Pachonk

2

mysqli_query возвращает mysqli_result объекта. Вместо того, чтобы сравнивать это целое попробовать использовать num_rows:

$res = mysqli_query($con,$check); 
if($res->num_rows){ 
    //User exists 
} 

Edit: Выше предполагается, что запрос использует SELECT * и это не будет работать с SELECT COUNT(*). Оформить ответ Алекс G.

+0

Я согласен с основной ошибкой, но он возвращает счет. Даже если никакие записи не найдены, которые совпадают по адресу электронной почты, строка счетчика все равно будет возвращена (с подсчетом 0 в ней). – Kickstart

+0

Это неверно в его запросе. Запрос OP всегда возвращает 1 строку, но он интересуется значением в этой строке. –

+0

Ба, правда. Изменили сообщение, чтобы немного разобраться. – Jim

3

mysqli_query Функция возвращает результирующий дескриптор. Затем вам нужно прочитать строки из него:

$rs = mysqli_query($con,$check); 
$data = mysqli_fetch_array($rs, MYSQLI_NUM); 
if($data[0] > 1) { 
    //user exists; 
} 

Также отметим, что SELECT count(1) FROM ... будет быстрее, чем SELECT count(*) FROM ... Вы не увидите большой разницы в небольшой стол, но с большим столом из нескольких сотен тысяч строк , разница может быть значительной.

0

Вы можете попробовать следующий код:

$query_code = "SELECT COUNT(itemCode) FROM masterData WHERE itemCode='{$itemCode}'"; 
$result_login = mysqli_query($conn,$query_code); 
$anything_found = mysqli_num_rows($result_login); 

if($anything_found > 0) { 
    $formOk = false; 
    echo "ITEM CODE ALREADY EXISTS! Please try again."; 
} 
Смежные вопросы