1

这是我正在使用的代码

<?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

4 回答 4

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 ...改为使用,然后获取totalwith的值mysql_fetch_assoc()


最后但并非最不重要的一点是,请考虑使用PDO而不是mysql_*函数,因为从长远来看它可能会对您有所帮助。查看本教程以了解如何使用它。

于 2011-05-31T23:26:43.990 回答
2

您不能仅从字符串中获取记录集中的行数。您必须选择一个数据库,并实际执行查询。

手册页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";

?>

这——通过修改特定的参数值——是使这个数据库接口工作的最低要求。

于 2011-05-31T23:31:05.067 回答
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
?>
于 2011-05-31T23:30:00.210 回答
-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; 
?>
于 2011-05-31T23:34:21.337 回答