Как вы уже правильно заметили, вам нужно mysqli_stmt_store_result($stmt);
после mysqli_stmt_execute($stmt);
.
Согласно PHP документам:
Если вы используете mysqli_stmt_store_result (), mysqli_stmt_num_rows () может быть вызван немедленно.
Однако я должен указать, что вам это не нужно, или на самом деле вам вообще не нужно использовать mysqli_stmt_num_rows()
.Я не думаю, что мне когда-либо приходилось использовать эту функцию самому.
То, что вы пытаетесь достичь, это проверить, существует ли конкретная строка в БД.Это можно сделать, как указано здесь: https://phpdelusions.net/mysqli/check_value
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli("localhost", "root", "", "test1");
$myUser = "qqq";
$sql = 'SELECT 1 FROM `users` WHERE `userName`=? LIMIT 1';
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $myUser);
$stmt->execute();
$exists = (bool) $stmt->get_result()->fetch_row();
die(nl2br("myUser = ".$myUser."\nmyresult = ".$exists));
Конечно, вместо (bool) $stmt->get_result()->fetch_row()
вы можете использовать (bool) $stmt->get_result()->num_rows
.