2010-05-19 85 views
3

即時通訊新的PHP,所以我決定按照this tutorial簡單的登錄屏幕。我得到的代碼設置,但是當我嘗試登錄我得到這個錯誤:PHP mySQL錯誤

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in (a long file path to the script) on line 27 

我從教程得到的代碼是:

<?php 
ob_start(); 
$host="thehost"; // Host name 
$username="myusername"; // Mysql username 
$password="mypass"; // Mysql password 
$db_name="test"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $myusername and $mypassword, table row must be 1 row 

if($count==1){ 
// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_register("myusername"); 
session_register("mypassword"); 
header("location:login_success.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 

ob_end_flush(); 
?> 

(注:所有的MySQL數據庫信息的填充在我的版本)

Aslo,作者給出了一個php5版本和一個正常的php版本。我已經試過並得到了同樣的錯誤。如果有人知道爲什麼發生這種情況,真的很感激。

回答

0

這是我做在PHP我的DB訪問:

$result=mysql_query($sql) or die ("bad sql query: ".mysql_error()); 

所以如果SQL是錯誤的;我得到一個可用的錯誤,通常與有罪SQL片段

+0

好吧,現在我得到這個錯誤:錯誤的sql查詢:表'test.members'不存在。任何想法下一步去哪裏? – nosedive25 2010-05-19 21:49:10

+0

@happy創建該表?本教程給出了步驟1中成員表的架構 – 2010-05-19 21:54:01

+0

我知道,我確實創建了它......一定是做了錯誤的事 – nosedive25 2010-05-19 21:56:50

4

您可以打印$sql變量並自己嘗試查詢,或者使用mysql_error()打印mysql錯誤。 此查詢似乎失敗。

+0

難道這只是我設置數據庫的方式的問題? – nosedive25 2010-05-19 21:44:52

+0

@ happyCoding25:可以。假設沒有名爲'username'的列會出現錯誤。建議檢查'mysql_error()'。 – webbiedave 2010-05-19 21:45:52

0

問題是mysql_num_rows需要一個資源對象,但如果沒有找到結果,它就會爲空。而不是以這種方式對行進行計數,只需檢查if $result === null即可。

+0

這不正確,盧卡斯。 – webbiedave 2010-05-19 21:41:51

+0

可能是錯誤的。不爲空,但也不是有效資源... – thetaiko 2010-05-19 21:42:42

+0

如果沒有結果,mysql_num_rows應該返回0。如果SQL語句失敗,它只會導致資源錯誤。 – 2010-05-19 21:43:05

1

您需要檢查mysql_query()的退貨;你不能假設它的工作。如果是FALSE,調用mysql_error()從MySQL

得到錯誤信息