Как я могу решить эту ошибку mysql_num_rows
Это код, с которым я работаю
<?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 ответа
Попробуй это...
Я добавляю вам выбор БД, выполнение запроса и правильный выбор 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;
?>
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_*
функции, так как это, вероятно, поможет вам в долгосрочной перспективе. Ознакомьтесь с этим руководством, чтобы узнать, как его использовать.
Вы не можете получить количество строк в наборе записей только из строки. Вы должны выбрать базу данных и фактически выполнить запрос.
Страница руководства для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";
?>
Это - с изменениями определенных значений параметров - это минимум, необходимый для работы интерфейса БД.
Я думаю, что вы забыли сообщить серверу, на какой базе данных работать. Можете ли вы попробовать это:
<?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
?>