我怎样才能解决这个mysql_num_rows错误

aur*_*rel 1 php mysql 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; 
?>
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

警告:mysql_num_rows()期望参数1是资源

我明白我应该使用mysqli,但php.net页面使用了mysql,所以我只是想学习如何使用$ printf和$ mysql_num_row.

我不是100%肯定我正在用这个$ sprintf做什么,所以如果这个问题太基础我很抱歉.

rid*_*rid 6

mysql_num_rows()期望参数1是资源,但是你给了它一个字符串.您应该进行查询并获取返回的资源mysql_query().

例如:

$resource = mysql_query($login);
$rows = mysql_num_rows($resource);
Run Code Online (Sandbox Code Playgroud)

要使用这些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
Run Code Online (Sandbox Code Playgroud)

如果你想用来sprintf()撰写查询,我建议你创建字符串并将其存储在一个适当命名的变量中,以便更容易理解:

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

然后发送查询mysql_query()以执行它:

$result = mysql_query($query);
Run Code Online (Sandbox Code Playgroud)

另请注意,该$link参数是可选的.如果您在该脚本中所做的只是使用单个数据库连接,则可以省略它以使代码更清晰.


作为旁注,mysql_num_rows()如果您不需要数据,则获取查询返回的行数是不好的做法.如果您需要找出的是有多少行,请考虑使用SELECT COUNT(*) AS total ...,然后获取totalwith 的值mysql_fetch_assoc().


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