2013-12-13 97 views
2

我只是在PHP中的新手,我需要創建一個PHP登錄形式,但它有一個語法錯誤說Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\login.php on line 18
也許你可以幫我在這TNX!PHP選擇登錄錯誤

<?php 

$con=mysqli_connect("localhost","root","","reservation"); 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to Database: " . mysqli_connect_error(); 
    } 
    else 
    { 
    } 

if ($_POST["SUBMIT"]="SUBMIT") 
{ 
$username = $_POST['username']; 
$password =$_POST['password']; 
$sql ="SELECT * FROM usersaccount where='$username' and password ='$password'"; 
$result=mysqli_query($con,$sql); 
$count=mysqli_num_rows($result); 
if($count==1) 
{ 
echo "success"; 
} 
//mysqli_close($con); 
} 
?> 
+0

'「SELECT * FROM usersaccount =‘$用戶名’和密碼='$密碼'「'???錯過了'where' –

+1

你在查詢時需要檢查錯誤,然後嘗試使用'$ result'。如果你這樣做了,你會被告知你的查詢語法錯誤。 – Barmar

+0

您的代碼容易受到SQL注入的影響。 – Gumbo

回答

3

SELECT說法是錯誤的......應該是

SELECT * FROM `usersaccount` WHERE `username` ='$username' and `password` ='$password'"; 
            ---------- // Here.. Added the column name 

你是不是爲username領域提供的列名。這是你的問題。既然你是與條件匹配的結果,你還需要一個WHERE子句!

聲明:停止使用mysql_ *函數,因爲它們已被棄用。改爲切換到MySQLi或PDO。

+1

我TNX的PR ST! – zxc

1

這意味着您的查詢(即$sql)已損壞。當您應該使用WHERE子句時,您正在將表與字符串進行比較。另外,password是保留字;逃避它,就像這樣:

$sql ="SELECT * FROM usersaccount WHERE `username` ='$username' and `password` ='$password'"; 

而且,你是敞開 SQL注入;你需要準備好的陳述。

+2

'密碼'不是保留字,我從來沒有必須在我的查詢中轉義它。 – Barmar

+0

嗯...... MySQL Workbench將它視爲一個整體。將不得不進行調查。 –

1

根據documentation你必須這樣做:

$con=mysqli_connect("localhost","root","","reservation"); 
//... 
$query = "SELECT * FROM usersaccount ='$username' and password ='$password'"; 
if ($stmt = mysqli_prepare($con, $query)) { 
    mysqli_stmt_execute($stmt);/* execute query */ 
    mysqli_stmt_store_result($stmt);/* store result */ 
    printf("Number of rows: %d.\n", mysqli_stmt_num_rows($stmt)); 
    mysqli_stmt_close($stmt);/* close statement */ 
} 
0

由於錯誤信息報告,它的第一個參數是一個布爾值,你應該在那個第一個參數一探究竟。

$result=mysqli_query($con,$sql); 

閱讀the documentation:如果一切正常,mysqli_query()返回mysqli_result()或FALSE(一個布爾值),如果它不能正常工作。所以,你的查詢不起作用,它返回一個布爾值。

你或許應該檢查執行查詢的結果,如果失敗的話,你應該表現出所產生的錯誤信息:

if ($result = mysqli_query($con, $sql) === FALSE) { 
    printf("Invalid query: %s\nWhole query: %s\n", mysqli_error, $sql); 
    exit(); 
}