2017-02-14 33 views
0

我得到這個錯誤:收到錯誤:類的mysqli的對象不能轉換爲字符串上線5

Catchable fatal error: Object of class mysqli could not be converted to string in C:\xampp\htdocs\gym\userAvailability.php on line 5

這是代碼:

<?php 

function username_exists($username, $con){ 

    $sql = "SELECT * FROM admin WHERE username = '$username'"; 
    $result = mysqli_query($con, sql); 
    $resultarr = mysqli_fetch_assoc($result); 


    if(!mysqli_num_rows($result) == 1){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

我已經還檢查了.php文件中所有使用function username_exist的變量名,並且它們都是正確的。有想法該怎麼解決這個嗎?

+0

我斗膽要傳遞的參數錯誤的順序,以你的函數。你可以嘗試鍵入連接以確保:'函數username_exists($ username,mysqli $ con)' –

回答

0

首先,這段代碼很容易被SQL注入 - 你應該使用帶有佔位符的預處理語句代替。您還獲取了未使用的結果 - 因此您可以在此函數中刪除mysqli_fetch_assoc()

但是,您的實際問題是在您的$sql前缺少美元符號,此處的邏輯if(!mysqli_num_rows($result) == 1) {與此相反。如果有結果,你基本上得到!1 == 1,這是錯誤的(因爲!1變成0,所以你得到0 == 1)。所以逆運算符!的結果是相反的。

清理了一下,固定的邏輯問題,並加入準備好的語句,應該是這樣的

function username_exists($username, $con){ 
    $stmt = $con->prepare("SELECT * FROM admin WHERE username = ?"); 
    $stmt->bind_param('s', $username); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $num_rows = $stmt->num_rows; 
    $stmt->close(); 

    return $num_rows == 1 ? true : false; 
} 

此功能,如果用戶名在數據庫中找到將現在回到true。現在,您應該使用這個功能就像

if (!username_exists($_POST['username'], $con) { 
    /* Do the insert to the database here */ 
} else { 
    /* The username was taken! 
     Don't perform the INSERT query */ 
} 

當通過$username參數的功能,使用原用戶名(不使用就可以了mysqli_real_escape_string()這裏,因爲我們使用的預處理語句)。


您也可能要考慮添加UNIQUE約束數據庫中的用戶名,列。

+0

謝謝你的迴應!應用你評論中的更新代碼,但我有一個'$ username ='Nidare Kun';'的問題:我刪除了'mysqli_real_escape_string()',並用'$ username = $ _POST ['username']替換了它。 '但它仍然讓我註冊一個已經被使用的用戶名。這似乎是什麼問題?謝謝! – lexeezy

+0

這只是爲了演示目的,我編輯了我的答案:-) – Qirel

+0

它的工作!感謝拯救我的生命<3 – lexeezy

相關問題