sql >> Databáze >  >> RDS >> Mysql

Volání Ajax s dotazem PHP / MySQLi vrací nesprávné výsledky

Není důvod používat num_rows , který je nejen matoucí, snadno zneužitelný, ale také by mohl způsobit problémy s výkonem, pokud by byl zneužit.

Stačí načíst COUNT(1) a poté načtěte jeden sloupec z prvního řádku ve vašem výsledku 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";
}

Pokud jste z nějakého zvláštního důvodu chtěli zůstat u num_rows buď byste museli zavolat store_result() na příkazu a poté získejte num_rows z příkazu nebo volání get_result() a přečtěte si hodnotu num_rows na vrácené výsledkové sadě.



  1. Jak nastavit vlastnosti připojení (includeSynonyms)

  2. Zkombinujte SQLite Count() se GROUP BY a přidejte do své sady výsledků sloupec „Count“

  3. Mamp localhost řeší velmi pomalu

  4. chyba poddotazu a příliš mnoho hodnot pomocí xmllagg