2015-12-20 58 views
5

這裏的是我的代碼:PHP /庫MySQLi - 致命錯誤:調用一個成員函數mysqli_query()非對象

require "../include/functions.php"; 

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

ConnectWithMySQLiDatabase(); 

$Cat = addslashes($_POST["Category"]); 

$v = $conn->mysqli_query($conn,"SELECT * FROM `categories` WHERE `id`=$Cat"); 
$vrowi = mysqli_fetch_array($v, MYSQLI_ASSOC); 

$url = $conn->real_escape_string($vrowi['Link']); 

這是我在functions.php

function ConnectWithMySQLiDatabase() { 

    global $dbhost, $dbuser, $dbpass, $database, $HTTP_SERVER_VARS; 

    $conn = new mysqli($dbhost, $dbuser, $dbpass, $database); 
    // Check connection 
    if (mysqli_connect_errno()) 
     { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 


    $conn->set_charset("utf8"); 

    global $conn; 

} 

變量$dbhost, $dbuser, $dbpass, $database,設置正確。

當我嘗試執行此mysqli_query我收到以下錯誤:

<b>Fatal error</b>: Call to a member function mysqli_query() on a non-object in <b>/fetch_category_products.php</b> on line <b>19</b><br /> 

第19行是:

$v = $conn->mysqli_query($conn,"SELECT * FROM `categories` WHERE `id`=$Cat"); 

能否請你告訴我哪裏是我的錯誤,我該如何解決?

在此先感謝!

+0

** **危險:你是* *容易受到[SQL注入攻擊](http://bobby-tables.com/)**,你需要[抗辯](http://stackoverflow.com/questions/60174/best-way-to-prevent- sql-injection-in-php)自己從。 ('addslashes'對此不安全,即使'addslashes'的文檔也這樣說) – Quentin

+0

我用什麼來取代它? 'mysqli_real_escape_string'? –

+0

@TonyStark請考慮爲您的數據庫工作使用PDO。 – TwoStraws

回答

3

出現此錯誤是因爲數據庫連接不起作用 - 它的字面意思是$conn的值不是一個對象,這可能意味着它未設置或設置爲false,因爲連接失敗。更改ConnectWithMySQLiDatabase(),以便其最後一行不是global $conn;而是return $conn;

現在將您撥打該功能的方式從ConnectWithMySQLiDatabase();更改爲$conn = ConnectWithMySQLiDatabase();,我相信問題會消失。

OP此更改後發佈了一個更新,並且混亂變得更加清晰:現在他們有一個MySQLi連接,他們應該只使用query,像這樣:

$v = $conn->query("SELECT * FROM `categories` WHERE `id`=$Cat"); 
+0

var_dump給了我這個:http://pastebin.com/Uf7HgUwB,我仍然收到錯誤'致命的錯誤:調用未定義的方法mysqli :: mysqli_query()'在這一行'$ v = $ conn-> mysqli_query($ conn,「SELECT * FROM 'categories' WHERE'id' = $ Cat「);'有什麼建議? –

+0

謝謝!截圖非常有幫助。看到我更新的答案。 – TwoStraws

+0

現在我收到此錯誤:'警告:mysqli :: query()期望參數1是字符串,在''中給出的對象在同一行上。 –

相關問題