2017-02-09 4 views
1

Я хотел бы получить количество строк, возвращаемых запросом select в PHP. У меня есть следующий код: -PHP - получить количество строк, возвращаемых запросом на выбор sql

$connection = new mysqli($server_name, $server_login, $server_password, $dbName); 

if (!$connection) { 
    echo "error"; 
    die("Connection failed. ".mysqli_connect_error()) 
} 

//... 

$command = "SELECT player_id FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."' "; 

$result = mysqli_query($connection, $command); 
echo num_rows($result); 

Я также попытался с mysqli_stmt_num_rows() и mysqli_num_rows(), но мой результат всегда пустой (нет результата на самом деле).

Знаете ли вы, почему? Благодарю.

+2

счетчик попробовать(), чтобы получить нет. строк –

+1

@RahulPawar 'count' работает с массивами. OP хочет количество строк, соответствующих запросу! –

+2

Я думаю @RahulPawar означает функцию mysql COUNT –

ответ

8

Есть несколько способов, чтобы получить количество строк, возвращаемых, наиболее распространенными из них являются для запуска COUNT(*) в MySQL, но есть также mysqli_num_rows($result) (не num_rows(), как вы использовали, если вы не создали, что функция самостоятельно). mysqli_stmt_num_rows() будет работать только тогда, когда вы используете prepare() вместо query().

В ordre для использования COUNT(*) вам нужно сначала запустить и получить запрос, а mysqli_num_rows() - это константа, возвращаемая объектом MySQLiResult, которую вы можете использовать, если запрос не сработал.

Я изменил фрагмент кода, который вам нужно проверить, действительно ли запрос был успешно выполнен, mysqli_num_rows() не будет работать, если запрос завершился неудачно.

$command = "SELECT player_id FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."' "; 

if ($result = mysqli_query($connection, $command)) { 
    echo mysqli_num_rows($result); 
} else { 
    /* Query failed */ 
    echo "There was an error with the query: $command"; 
    echo "<br />".mysqli_error($connect); 
} 

Или вы можете использовать COUNT(*), но тогда вам придется принести результаты первого.

$command = "SELECT player_id, COUNT(*) as cnt FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."' "; 

if ($result = mysqli_query($connection, $command)) { 
    $row = mysqli_fetch_assoc($result); 
    echo $row['cnt']; 
} else { 
    /* Query failed */ 
    echo "There was an error with the query: $command"; 
    echo "<br />".mysqli_error($connect); 
} 

Следует также отметить, что этот запрос уязвим для SQL инъекций, вы должны научиться использовать подготовленные заявления с заполнителями, чтобы защитить себя от этого. manual on prepare() - хорошее место, чтобы начать с этого.


Вы также, кажется, хранение паролей либо простой текст, или с плохими методами (например, md5 или sha1). PHP предлагает встроенную функцию, password_hash()/password_verify(), которую вы должны использовать. Если вы находитесь ниже PHP версии 5.5, эти функции не являются родными, но есть пакет совместимости, который можно использовать вместо него.

В качестве окончательного примечания, смешение объектно-ориентированного и процедурного кода будет технически работать (поскольку процедурные в действительности вызывают объектно-ориентированные), но считается плохой практикой. Если вы подключаетесь к объекту, продолжайте использовать объектно-ориентированный код.

Ссылки
+3

Этот ответ действительно и отвечает на вопрос, мне любопытно, почему downvote? – Qirel

+0

также любопытно, чтобы knw причина для dv –

+1

Upvote от меня! Отвечает на вопрос и дает OP много полезной информации! –

5
$command = "SELECT count(*) as numberofrecord, player_id FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."' "; 
3

Очень простое решение: -

Использование $result->num_rows ниже в пути: -

if ($result = $mysqli->query("SELECT player_id FROM Player WHERE player_login = '" . $login."' AND player_password= '".$password."'")) { 
    printf("Select returned %d rows.\n", $result->num_rows); 
} 

Ссылка: - http://php.net/manual/en/mysqli.query.php

Примечание: -

Между тем, прочитайте prepared statement и используйте их, чтобы предотвратить код от SQL Injection.

Также всегда используйте password hashing mechanism при сохранении пароля (если вы использовали простой пароль).

Смежные вопросы