2011-02-17 32 views
1

一個PHP教程給了我下面的代碼來做一個特定的數據庫搜索。我把它放在content.php文件,它工作正常查詢停止工作後,我們使它成爲函數

$query = "SELECT * 
     FROM subjects 
     ORDER BY position ASC"; 
$subject_set = mysql_query($query, $connection); 
confirm_query($subject_set); 

(注意,該confirm_query功能是它在include.php訪問

function confirm_query($result_set){ 
if (!$result_set) { 
    die("Database query failed: " . mysql_error()); 
    } 
} 

然後下面教程告訴我(爲使其resusable的目的)打開$查詢到在include.php文件

因此一個功能,在include.php我們這樣做

function get_all_subjects() { 
    $query = "SELECT * 
      FROM subjects 
      ORDER BY position ASC"; 
    $subject_set = mysql_query($query, $connection); 
    confirm_query($subject_set); 
    return $subject_set; 

} 

接下來,我們通過訪問這一功能在content.php文件

$subject_set = get_all_subjects(); 

但是下面的,現在說「數據庫查詢失敗」

所以把第一個代碼塊以上的成include.php文件以某種方式影響了查詢

這是明確的嗎?

任何想法如何解決它?

在功能

回答

2

,他不知道什麼是$connection變量,

一個選項發送到功能

function get_all_subjects($connection) { 
.......... 

}

連接作爲參數,調用功能

$subject_set = get_all_subjects($connection); 

外觀上變量的作用域manual

這裏$a變量是內包含的b.inc 腳本 可用。但是,在用戶定義的 函數中引入了本地函數作用域 。在 函數中使用的任何變量默認限於 本地函數作用域。例如:

<?php 
$a = 1; /* global scope */ 

function test() 
{ 
    echo $a; /* reference to local scope variable */ 
} 

test(); 
?> 

這個腳本將不會產生任何 輸出,因爲echo語句 指$一個 變量的本地版本,並且尚未分配 內這個值範圍。您可能會注意到這是一點 不同於C語言的,因爲 C中的全局變量是 ,對於函數 可自動使用,除非明確被 局部定義覆蓋。這會導致人們一些 問題可能 無意中改變一個全局變量 。在PHP中的全局變量必須 是一個函數裏面 如果他們要在 功能使用聲明的全局。

+0

$ connection是在原始文件中定義的,它是否不會轉入include.php? – Leahcim 2011-02-17 09:31:19

+0

沒有的功能,在該功能尋找局部變量 – 2011-02-17 09:32:22

+0

外觀上http://php.net/manual/en/language.variables.scope.php – 2011-02-17 09:33:30

0

啊yup ..問題是,在函數中你有本地作用域,所以超出範圍的變量不能被引用。它們由值給出..你可以作爲一個PARAM加$連接變量的函數

-2

如果數據庫連接是通過一個單獨的文件來處理,即「connect.php」你必須像這樣所有後續功能中包含它:

require "./connect.php";