2014-12-08 3 views
-1
$check="SELECT * FROM users WHERE name = '$_POST[name]'"; 
$rs = mysqli_query($conn,$check); 
$data = mysqli_fetch_array($rs, MYSQLI_NUM); 
if($data[0] > 1) { 
    echo "User Already in Exists<br/>"; 
}else 
    echo "User does Not exist"; 

Правильно ли это? Он говорит, что Пользователь не существует ни на что; и я знаю, что в db есть пользователь с именем «test».Проверьте, существует ли пользователь mysql

+0

Какой идентификатор '$ data [0]'? – zerkms

+1

if (mysqli_num_rows ($ rs)> 0) {echo "пользователь существует;} – radar

+2

... или даже' SELECT COUNT (*) ... ' – zerkms

ответ

1
// this line makes mysqli throw exceptions so you'll never have to check 
// return values for false 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

// prepare a statement checking for existence 
$stmt = $conn->prepare('SELECT 1 FROM users WHERE name = ?'); 

// bind the POST param to the parameter 
$stmt->bind_param('s', $_POST['name']); 
$stmt->execute(); 

// if there are any rows, that means the name exists 
if ($stmt->fetch()) { 
    echo 'User "', htmlspecialchars($_POST['name']), '" already exists<br/>'; 
} else { 
    echo 'User "', htmlspecialchars($_POST['name']), '" does not exist<br/>'; 
} 
+0

Это работает! Но почему я так ошибался? –

+0

@HuangLee Я предполагаю, что у вас не было способа узнать, какой столбец будет находиться в позиции 0 набора результатов, потому что вы использовали 'SELECT * 'и что бы это ни было, по сравнению с'> 1', оценивали to 'false' – Phil

+0

@HuangLee Также ваш исходный код был уязвим для SQL-инъекции. Использование подготовленного оператора со связанными параметрами позволяет избежать этой проблемы – Phil