Mysql
 sql >> Base de données >  >> RDS >> Mysql

Appel Ajax avec requête PHP / MySQLi renvoyant des résultats erronés

Il n'y a aucune raison d'utiliser num_rows , qui non seulement prête à confusion et est facile à utiliser à mauvais escient, mais peut également entraîner des problèmes de performances en cas d'utilisation abusive.

Récupérez simplement COUNT(1) puis récupérez une seule colonne de la première ligne de votre résultat SQL.

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli($host, $username, $password, $database);
$conn->set_charset('utf8mb4');

$stmt = $conn->prepare("SELECT COUNT(1) FROM users WHERE username = ?");
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();
$exists = $stmt->get_result()->fetch_row()[0];

if($exists) {
    echo "valid";
} else {
    echo "invalid";
}

Si vous vouliez, pour une raison étrange, vous en tenir à num_rows vous devrez soit appeler store_result() sur la déclaration, puis obtenez le num_rows à partir de l'instruction ou appelez get_result() et lire la valeur de num_rows sur le jeu de résultats renvoyé.