2013-03-13 172 views
0

好吧,所以我正在努力將我的網站更新到mysqli,並且我對db連接的DB.php include有困難。將mysql連接到mysqli時的數據庫連接問題

所以我的db.php看起來像這樣。

<?php 
$username="usern"; 
$server="server"; 
$password="pwd"; 
$database="db"; 

//MySQLi methods 
$mysqli = new mysqli($server, $username, $password, $database) or trigger_error (mysqli_connect_errno().mysqli_connect_error()); 
?> 

注意:SQL錯誤輸出是用於調試林意識到,輸出SQL和冗長的錯誤是不是好的做法;)

不管怎麼說,這樣的作品就好了。

將db.php文件更新爲mysqli im後,所有使用該頁面的頁面都存在問題。基本上,即使包含我在第21行\ display_functions.php中得到以下錯誤mysqli致命錯誤:調用成員函數query()對第21行中的r \ includes \ display_functions.php中的非對象調用

該文件的相關部分是:

function showConfig ($configID) 
{ 
    date_default_timezone_set('America/Denver'); 
    require_once($_SERVER["DOCUMENT_ROOT"] . "/includes/DB.php"); 
    $tbl_name="avr"; 
    // Get information from DB for display  
    $configQuery="SELECT * FROM $tbl_name WHERE configID=$configID"; 
    $configResult=$mysqli->query($configQuery); 
    <some more code> 
} 

當這是所有MySQL,它的工作,現在它不和Im真的不知道爲什麼。我認爲包含聲明應該引入所有文件中的所有內容,但使這個函數(和其他類似文件)工作的唯一方法是基本上將DB.php的內容放入函數中。這當然是一種可怕的做法。

此外,仍然在學習這一切,所以原諒這個無知的問題,但它只是成爲本週末時區變化的問題,我將如何設置默認時區功能,所以我不必把它放在一切?

回答

0

該函數內部的$ mysqli具有局部範圍。它不是同一個變量。您需要可以通過$ mysqli的作爲參數

function showConfig ($configID, $mysqli) 

,或者使用全局聲明在函數內部

function showConfig ($configID) 
{ 
    global $mysqli; 
+0

因此然後放在require_once我只是需要把上任何網頁時調用這個函數和它會通過? 這是改變的東西還是我一直在做錯的事情?謝謝! – OCPik4chu 2013-03-13 21:29:48

+0

是的,我有我的數據庫連接定義在一個單獨的文件中,我有require_onced。我只是將它傳遞給我需要的任何函數作爲參數。事實上,我有一些相當詳細的查詢,所以我有我的查詢在一個文件中,我的函數在另一個文件中稱爲query_builder(需要查詢文件),然後我需要query_builder文件到我需要運行它們的任何頁面。 – 2013-03-14 13:09:54

+0

謝謝,我的意思是將sql連接變量傳遞給函數。在MySQL中,我不必這樣做,所以我想知道這是否是mysqli的改變,或者我之前可以做到,我只是繞過它奇怪的方式。我現在將所有插入內容都放在一個單獨的文件中,現在正在將我的查詢移動到單獨的文件中。這些作品很好並符合其目的,但有很多優化可以發生。再次感謝 :) – OCPik4chu 2013-03-14 14:10:58