Как я могу решить эту ошибку mysql_num_rows - PullRequest
1 голос
/ 01 июня 2011

Это код, с которым я работаю

<?php
$link = mysql_connect('localhost', 'root', '')
    OR die(mysql_error());

          $user =  $_POST['username'];
      $password = $_POST['password'];

$login = sprintf("SELECT * FROM imagehosting WHERE username='%s' AND password='%s'  ",
            mysql_real_escape_string($user, $link),
            mysql_real_escape_string($password, $link));

            $rowcount = mysql_num_rows($login);
            echo "<br /><br />" . $rowcount; 
?>

Это ошибка, которую я получаю

Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом

Я понимаю, что должен использовать mysqli, но страница php.net использовала mysql, поэтому я просто пытаюсь узнать, как использовать $ printf и $ mysql_num_row.

Я не уверен на 100%, что я делаю с этим $ sprintf, поэтому извините, если вопрос слишком простой.

Ответы [ 4 ]

6 голосов
/ 01 июня 2011

mysql_num_rows() ожидает, что параметр 1 будет ресурсом, но вы дали ему строку. Вы должны сделать запрос и получить ресурс, возвращаемый mysql_query().

Например:

$resource = mysql_query($login);
$rows = mysql_num_rows($resource);

Чтобы использовать функции mysql_*, вы должны сделать что-то вроде этого:

mysql_connect('host', 'user', 'password'); // connect to server
mysql_select_db('database name'); // select the database you'll be working with

$result = mysql_query('SELECT test FROM test_table'); // make a query
while ($row = mysql_fetch_assoc($result)) { // go through the obtained results
    echo $row['test']; // use the obtained results
}

mysql_close(); // close the database connection

Если вы хотите использовать sprintf() для составления запроса, я предлагаю вам создать строку и сохранить ее в переменной с соответствующим именем, чтобы было легче следовать:

$query = sprintf("SELECT test FROM test_table WHERE a = '%s' AND b = '%s'",
    mysql_real_escape_string($a),
    mysql_real_escape_string($b));

Затем отправьте запрос на mysql_query(), чтобы выполнить его:

$result = mysql_query($query);

Также обратите внимание, что параметр $link является необязательным. Если все, что вы когда-либо делаете в этом скрипте, работает с одним подключением к базе данных, вы можете пропустить его, чтобы сделать код более понятным.


В качестве дополнительного примечания плохой практикой является получение числа строк, возвращаемых запросом, с помощью mysql_num_rows(), если вам также не нужны данные. Если все, что вам нужно выяснить, - это количество строк, рассмотрите возможность использования SELECT COUNT(*) AS total ..., а затем получите значение total с mysql_fetch_assoc().


И, наконец, что не менее важно, рассмотрите возможность использования PDO вместо mysql_* функций, поскольку это, вероятно, поможет вам в долгосрочной перспективе. Прочтите этот учебник , чтобы узнать, как его использовать.

2 голосов
/ 01 июня 2011

Вы не можете получить количество строк в наборе записей только из строки. Вы должны выбрать базу данных и фактически выполнить запрос.

Страница руководства для mysql_num_rows (которую, конечно, вы прочитали перед использованием функции!) Содержит удобный пример того, что вам нужно сделать.

Вот их пример:

<?php

$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);

$result = mysql_query("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows($result);

echo "$num_rows Rows\n";

?>

Это & mdash; с изменениями определенных значений параметров & mdash; минимум , необходимый для работы этого интерфейса БД.

1 голос
/ 01 июня 2011

Я думаю, вы забыли сообщить серверу, на какой базе данных работать.Можете ли вы попробовать это:

<?php
$link = mysql_connect('localhost', 'root', '') 
    OR die(mysql_error());

$db = mysql_select_db('mydb', $link)

$user =  $_POST['username'];
$password = $_POST['password'];

// ...and so on, and so forth
?>
0 голосов
/ 01 июня 2011

Попробуйте это ...

Я добавлю вам выбор БД, выполнение запроса и правильный выбор num_rows.

<?php
$link = mysql_connect('localhost', 'root', '') OR die(mysql_error());
mysql_select_db('your_db',$link);

$user =  $_POST['username'];
$password = $_POST['password'];

$login = sprintf("SELECT * FROM imagehosting WHERE username='%s' AND password='%s'  ",
            mysql_real_escape_string($user, $link),
            mysql_real_escape_string($password, $link));
$query=mysql_query($login) OR die(mysql_error());

            $rowcount = mysql_num_rows($query);
            echo "<br /><br />" . $rowcount; 
?>
...