2013-07-29 46 views
-1

我無法從函數內部連接到我的數據庫。我收到以下錯誤:從內部php函數連接到mysqli

「警告:mysqli的查詢::()預計參數1是字符串,對象給出......」

我使用「全球性」,所以不看看我做錯了什麼。

- 文件:db.php中 -

$db = new mysqli($hostname, $sql_us, $sql_us_pwd, $sql_db); // Connects fine 

- FILE:的functions.php -

function db_query($query, $type = 'assoc') { 

    global $db; 
    $result = $db->query($query); 

    if ($type == 'assoc') { 
    $rows = $result->fetch_array(MYSQLI_ASSOC); 
    } else { 
    $rows = $result->fetch_object(); 
    } 

    return $rows; 
    mysqli_free_result($result); 

} 

- FILE:somepage.php -

$query = "SELECT * FROM `users`"; 
$users = db_query($query); 
+1

你是否在somepage.php中包含db.php和functions.php? – Maximus2012

+0

在設置$ db之前是否使用'global $ db;'? –

+0

@ Maximus2012:是的,我在somepage.php上包含了兩個頁面。其他不需要db連接的函數也可以正常工作。 – JROB

回答

-1

這是對我工作的罰款:

// db.php 
$db = new mysqli($hostname, $sql_us, $sql_us_pwd, $sql_db); // Connects fine 

// functions.php 
include_once('db.php'); 

function db_query($query, $type = 'assoc') { 
    global $db; 
    $result = $db->query($query); 

    if ($type == 'assoc') { 
     $rows = $result->fetch_array(MYSQLI_ASSOC); 
    } else { 
     $rows = $result->fetch_object(); 
    } 

    return $rows; 
    mysqli_free_result($result); 
} 

// somepage.php 
include_once('functions.php'); 

$query = "SELECT * FROM `users`"; 
$users = db_query($query); 

var_dump($users); 

他們都在同一目錄下。另外,由於我沒有用戶表,所以我嘗試使用其中一個表格。

+1

這不完全是一個答案,他的問題是,他似乎是在他的代碼中某處傳遞一個對象到mysqli :: query函數,而不是實際的查詢字符串 –

+0

,但是我不應該也得到這個錯誤嗎?除非OP還沒有其他代碼在這裏發佈。 – Maximus2012

+0

這就是我想的是,他沒有發佈一些代碼,因爲錯誤是特別顯示hes傳遞一個對象而不是一個字符串。 –

-1

這可能會幫助你。

function db_query($query, $db, $type = 'assoc') { 

    $result = $db->query($query); 

    if ($type == 'assoc') { 
    $rows = $result->fetch_array(MYSQLI_ASSOC); 
    } else { 
    $rows = $result->fetch_object(); 
    } 

    return $rows; 
    mysqli_free_result($result); 

} 

$db = new mysqli($hostname, $sql_us, $sql_us_pwd, $sql_db); // Connects fine 
$query = "SELECT * FROM `users`"; 
$users = db_query($query,$db); 

$ DB連接沒有被傳遞給函數,因此參數不會傳遞到MySQL的查詢功能,在那裏你所得到的錯誤。

+1

他有全球$ db;所以$ db是全局的,所以它會自動包含,並且錯誤是針對mysqli :: query函數而不是$ db變量的。如果是$ db變量,他會得到一個未定義的變量錯誤。 –

+0

我嘗試每次都向函數傳遞'$ db',這是可行的,但我不應該在我將其聲明爲函數內部的「全局」時使用。我試圖避免每次使用函數都要傳遞'$ db'。 – JROB

+0

你有沒有試過這種程序風格? –