2011-05-31 114 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接口工作所需的最低