Метод num_rows не возвращает количество выбранных строк - PullRequest
1 голос
/ 30 августа 2010

Это код:

$q = $this->db->prepare("SELECT id FROM `users` WHERE username=? AND password=? LIMIT 1");
$q->bind_param('ss', $username, $password);
$q->execute();
printf('Rows returned: %i', $q->num_rows); 

Я использую MySQLi, чтобы проверить и проверить учетные данные пользователя. Все работает, и запрос выполняется, и данные возвращаются (я проверял это отдельно), но я получаю только этот вывод: Rows returned:

Здесь что-то не так? Я новичок в использовании MySQLi, но, следуя примерам PHP.net, в этом коде нет ничего плохого. Приветствия.

Ответы [ 2 ]

5 голосов
/ 30 августа 2010

С документы :

Если вы не используете mysqli_stmt_store_result () и немедленно вызываете эту функцию после выполнения подготовленного оператора, эта функция обычно возвращает 0, так как не может узнать, сколько строк в наборе результатов, поскольку набор результатов не является сохраняется в памяти еще.

mysqli_stmt_store_result () сохраняет результирующий набор в памяти, поэтому вы можете сразу использовать эту функцию после того, как вы выполнили оператор и сохранили результирующий набор.

Так что вам нужно изменить его на:

$q->bind_param('ss', $username, $password);
$q->execute();
$q->store_result();
printf('Rows returned: %d', $q->num_rows);
0 голосов
/ 30 августа 2010

Не уверен, что он идет в правильном направлении, но если вы уже ограничиваете результат первой строкой, тогда вам в основном нужно только проверить, является ли результат пустым.Если бы вы использовали:

$result = mysql_query($query);    

, я бы предложил что-то вроде:

if (!$result)

Но то, что вы делаете, не похоже на обычные вызовы php, все равно надеюсь, что это поможет.

...