这是我正在使用的代码
<?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做什么,所以如果问题太基础我很抱歉。
答案 0 :(得分:6)
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 ...
,然后使用mysql_fetch_assoc()
获取total
的值。
最后但并非最不重要的是,请考虑使用PDO代替mysql_*
函数,因为从长远来看它可能对您有所帮助。查看此tutorial以了解如何使用它。
答案 1 :(得分:2)
您无法仅从字符串中获取记录集中的行数。您必须选择一个数据库,并实际执行查询。
The manual page for 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";
?>
对特定参数值进行修改 - 使此数据库界面正常工作所需的最小。
答案 2 :(得分:1)
我想你忘了告诉服务器要处理哪个数据库。你能试试这个:
<?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
?>
答案 3 :(得分:-1)
试试这个......
我添加选择数据库,查询执行并更正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;
?>