2014-01-20 48 views
0

我已經搜索了很多基本上相同的問題,因此它似乎沒有幫助。過了一段時間,因爲我已經觸摸了PHP,所以我猜這是一個簡單的解決方案,但真的無法弄清楚。致命錯誤:調用一個成員函數query()在admin.php上的一個非對象在第219行

config.php文件:(納入admin.php的)

$mysqli = new mysqli($mHost, $mUser, $mPass, $db);

admin.php的:

$sqlQuery = "INSERT INTO `category` (`id`, `name`) VALUES ('', '$_POST[name]')"; 
$result = $mysqli->query($sqlQuery);

的var_dump($結果)返回:

NULL

,並給出錯誤:

Fatal error: Call to a member function query() on a non-object in

+0

您是否嘗試過調試? – Daedalus

+1

檢查您的數據庫連接。你確定你有$ mHost,$ mUser等正確的值嗎? –

+0

你有很多代碼在219行有錯誤。看來$ mysqli不再是mysqli對象了。也許有代碼之前,$ mysqli被改變了。 – SenseException

回答

4

您不在查看致電new mysqli的結果。如果失敗,則$mysqli將爲空,而不是您可以查詢的有效對象。

另外,通過構建具有外部變量的SQL語句,您可以自己開放SQL注入攻擊。另外,任何帶有單引號的輸入數據,就像名字「O'Malley」一樣,將炸燬你的SQL查詢。請了解使用參數化查詢(最好是使用PDO模塊)來保護您的Web應用程序。我的網站http://bobby-tables.com/php有幾個例子可以幫助你入門,this question有很多例子。

0

在放樣,你應該叫

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

這使您不必檢查任何返回值,只是把try { ... } catch { ... }塊。

try { 

    if (
     !isset($_POST['name'])  || 
     !is_string($_POST['name']) || 
     $_POST['name'] === '' 
    ) { 
     throw new UnexpectedValueException('$_POST[\'name\'] is empty'); 
    } 

    $mysqli = new mysqli($mHost, $mUser, $mPass, $db); 
    $stmt = $mysqli->prepare("INSERT INTO `category` (`name`) VALUES (?)"); 
    $stmt->bind_param('s', $_POST['name']); 
    $stmt->execute(); 

    echo 'Success'; 

} catch (Exception $e) { 

    echo $e->getMessage(); 

} 
相關問題