2011-05-31 112 views
1

这是我与我怎样才能解决这个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做什么,所以如果问题太简单,我很抱歉。

+0

这意味着查询失败,调试它。 – 2011-05-31 23:25:54

+0

mmm ...为什么我看不到mysql_select_db()? – RRStoyanov 2011-05-31 23:28:20

+0

可能的重复[警告:mysql_fetch_ *期望参数1是资源,布尔给定错误](http://stackoverflow.com/questions/11674312/warning-mysql-fetch-expects-parameter-1-to-be-resource -boolean-given-error) – 2012-07-30 14:54:27

回答

-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; 
?> 
+0

如果你查询失败,你永远不会得到'mysql_num_rows()'的输出,所以首先检查你的查询是否作为例外运行if(!$ query){ die('There was an error in query'。mysql_error )); }'如果查询没有按预期执行,脚本将会死亡,否则会继续... – afarazit 2011-05-31 23:56:14

+0

那为什么你给了我一个“-1”?尼斯... – RRStoyanov 2011-06-01 07:29:42

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

我想你忘了告诉服务器要在哪个数据库上工作。你可以试试这个:

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

他仍然需要实际执行查询也是。 – 2011-05-31 23:31:25

+0

是的,我问同样的东西......他不需要'$ db',只需要'mysql_select_db('db_name',$ link)':P – RRStoyanov 2011-05-31 23:32:16

+0

有时候,特别是在编码时,返回值非常方便同时等待烤牛肉从烤箱里出来或者在湖人开启的时候。通过阅读等式左边的变量名,我可以很容易地理解代码在做什么。 – 2011-06-01 01:01:56

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"; 

?> 

这—与修改,具体参数值—是让这个DB接口工作所需的最低