2013-02-18 95 views
-2

這是錯誤說mysqli的錯誤非對象

Fatal error: Call to a member function fetch() on a non-object in C:\xampp\htdocs\Grading\logging.php on line 30

我不知道寫什麼有IM中的mysqli還挺新的,這裏是我的代碼

<?php 
$username = $_POST['username']; 
$password = $_POST['password']; 
$sql  = $con->query("SELECT * FROM user WHERE username = '".$username."' "); 
$row  = $sql->fetch(); 

if ($username == $row['username'] and $password == $row['password']) 
{ 
    echo "<script>window.location.href='home.php'; </script>"; 
} 
else 
{ 
    echo "<script> alert ('Invalid Username or Password'); window.location.href='login.php'; </script>"; 
} 
?> 
+0

這是整個代碼?您是否在調用函數之前在任何地方創建'$ con'對象? – Oldskool 2013-02-18 08:50:50

+0

$ con = new mysqli('localhost','root','','teacher'); – Goenitz 2013-02-18 09:02:21

+0

更好的使用預製的[mysqli wrapper - safeMysql](https://github.com/colshrapnel/safemysql/blob/master/safemysql.class.php)。它會爲你節省很多頭痛。 – 2013-02-18 09:13:04

回答

0

首先,你的$ con變量是什麼? 通過MySQLi猜測其正確的MySQL連接。因此,您執行了MySQLi庫的query()的方法。但根據documentation of that method,您可以看到執行結果爲false,true或mysql_result

而且,更重要的是,mysqli_result 沒有方法fetch()。 正如您在文檔中看到的那樣,可以使用fetch_all(),fetch_assoc()和fetch_array()函數。您可以使用它們而不是fetch()。

此外,fetch方法是類mysqli_stmt(MySQLi Statement)的方法。但是可以使用$ con> prepare()調用檢索MySQLi預處理語句,而不是使用$ con> query()方法檢索。