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_*
функций, поскольку это, вероятно, поможет вам в долгосрочной перспективе. Прочтите этот учебник , чтобы узнать, как его использовать.