Проверьте, существует ли имя пользователя с MySQLi

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

это login.php:

<?php session_start(); $pseudo = $_POST['pseudo']; $mail = $_POST['mail']; $pseudo=mysql_real_escape_string($pseudo); $pseudo=ltrim($pseudo); $pseudo=rtrim($pseudo); $mail=mysql_real_escape_string($mail); $mail=trim($mail); $sql=mysqli_connect('localhost','root','','bdd_name'); $query=("SELECT COUNT(*) FROM t_people WHERE 'PEO_PSEUDO'='".$pseudo."' OR 'PEO_MAIL'='".$mail."'"); $result = mysqli_prepare($sql,$query); mysqli_stmt_execute($result); mysqli_stmt_store_result($result); if (mysqli_stmt_num_rows($result) == 0) { echo 1; } else { echo 2; } mysqli_stmt_free_result($result); mysqli_stmt_close($result); ?> 

И это часть моего JavaScript:

 var pseudo=$("#pseudo").val(); var mail=$("#mail").val(); $.ajax({ type: "POST", url: "login.php", data: {pseudo:pseudo, mail:mail} }).done(function(result) { if (result==1) { good(); } else if (result==2) { bad(); } }); 

Может ли кто-нибудь сказать мне, что в этом плохого?

Я нахожусь на этом с утра, и я не знаю …

Некоторые вещи идут не так. Не используйте mysql_real_escape_string потому что вы работаете с mysqli_* . mysqli_real_escape_string этого используйте mysqli_real_escape_string . Но лучше использовать mysqli_stmt_bind_param потому что вы работаете с подготовленными операторами. И если вы работаете с COUNT(*) вы всегда получаете 1 строку.

 $pseudo = $_POST['pseudo']; $mail = $_POST['mail']; $query = "SELECT * FROM t_people WHERE PEO_PSEUDO = ? OR PEO_MAIL = ? LIMIT 1"; $stmt = mysqli_prepare($sql, $query); mysqli_stmt_bind_param($stmt, 'ss', $pseudo, $mail); mysqli_stmt_execute($stmt); mysqli_stmt_store_result($stmt); $numRows = mysqli_stmt_num_rows($stmt); mysqli_stmt_close($stmt); 

С COUNT(*) (что более эффективно) это выглядит так:

 $query = "SELECT COUNT(*) as numrows FROM t_people WHERE PEO_PSEUDO = ? OR PEO_MAIL = ?"; ... mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $numRows); mysqli_stmt_fetch($stmt); mysqli_stmt_close($stmt); // work with $numRows 

Вы используете неправильный оператор для ускорения использования оператора backtick в своем запросе, подобном этому

 "SELECT COUNT(*) FROM t_people WHERE `PEO_PSEUDO`='".$pseudo."' OR `PEO_MAIL`='".$mail."'"