2013-05-05 103 views
0

我有兩個函數從數據庫中檢索值。當我訪問連接($connection)內部功能時,我無法訪問數據庫。我使用的MySQL + PHPrequire_once在函數內部不工作

這裏是代碼:

<?php 
function getTierOne() 
{ 
    require_once('../config.php'); 
    $provincequery="SELECT provinces.ProvinceID, provinces.ProvinceName FROM provinces WHERE ProvinceID > 0"; 
     $result = $connection->query($provincequery); 
     while($province = $result->fetch_assoc()) 
     { 
      echo '<option value="'.$province['ProvinceID'].'">'.$province['ProvinceName'].'</option>'; 
     } 

} 

//************************************** 
//  First selection results  // 
//************************************** 
if(isset($_GET['func']) && $_GET['func'] == "province") 
{ 
    province($_GET['drop_var']); 
} 

function province($drop_var) 
{ 
    require_once('../config.php'); 

    $district_query = "SELECT districts.DistrictID, districts.DistrictName, provinces.ProvinceName FROM districts, provinces WHERE      provinces.ProvinceID=districts.ProvinceID AND districts.DistrictID > 0 AND provinces.ProvinceID='$drop_var'"; 

    $district_query_run= $connection->query($district_query); 
    echo '<select name="district" id="district" style="width:150px;"> 
      <option value="0" disabled="disabled" selected="selected">Select Your District</option>'; 

      while($district= $district_query_run->fetch_assoc()) 
      { 
       echo '<option value="'.$district['DistrictID'].'">'.$district['DistrictName'].'</option>'; 
      } 

    echo '</select>'; 
    echo "<script type=\"text/javascript\"> 
$('#wait_2').hide(); 
    $('#district').change(function(){ 
     $('#wait_2').show(); 
     $('#result_2').hide(); 
     $.get(\"ProDisPds/func.php\", { 
     func: \"district\", 
     drop_var: $('#district').val() 
     }, function(response){ 
     $('#result_2').fadeOut(); 
     setTimeout(\"finishAjax_tier_three('result_2', '\"+escape(response)+\"')\", 400); 
     }); 
     return false; 
    }); 
</script>"; 
} 
?> 
+0

這是不是很清楚什麼是不工作。你能更好地描述問題是什麼(錯誤信息,預期行爲與實際行爲,......) – Tchoupi 2013-05-05 04:08:13

+2

如果你的需求不工作,PHP會顯示一條錯誤消息。把'error_reporting(-1);'放在函數的開頭。這將打開錯誤報告。 – Daniel 2013-05-05 04:10:22

+0

對不起,對於遲到的回覆我沒有收到任何錯誤按摩我正在接受白色屏幕 – 2013-05-05 04:24:26

回答

1

考慮的不是這些函數內部需要,它會更有意義將參數傳遞給那些到數據庫連接的引用功能。

所以做

require_once('../config.php'); 

在打電話之前,使用該函數的功能,更實用和更少的開銷,當涉及到需要大量的時間時,你可以這樣做只是一次。

你應該向我們展示config.php文件,因爲它是連接的來源,但讓我們假設

$connection 

的config.php文件內定義的,那麼,使用isset

if($isset($connection)) 

儘管如此,你不能確定它是否設置。如果它沒有設置,那麼你可以訪問數據庫連接函數,我假設你在config中進行創建一個新的連接。如果這是行不通的

$connection = if(isset($connection)) ? $connection : newConnection(); 

,這是一所學校的項目或類似的東西,那麼你可以嘗試定義連接爲一個全局變量,可以訪問:

ternary operator可能是有用的在這裏你的文件中,所以你可以做這樣的事情的config.php內

$GLOBALS['connection'] = connect(); // Or $connection or whatever the function name was. 

所以,你可以做這樣的事情

require_once('../config.php'); 
$connection = $GLOBALS['connection']; 

裏面需要連接的文件。

但是使用全局變量是有風險的,除非您嘗試了其他所有內容,否則不應使用。

如果您向我們展示配置文件和相關的完整代碼,我很樂意爲您提供更多有用的提示。

還有兩件事:您的代碼易受SQL injections,使用prepared statements,並且不要將JavaScript和PHP混合在一起。

+0

長回答我的英語不好請簡單或編輯我的代碼 – 2013-05-05 04:31:35

+2

@DawoodNazari歡迎來到SO!我們不是一個要求苛刻的社區,所以請不要通過提供非常詳細的答案向幫助您的用戶提出要求。如果您有任何具體問題,您需要花時間瞭解海報的答案並發表評論,這是您的工作。謝謝! – 2013-05-05 04:34:48

+0

好的,這裏是config.php頁面的代碼<?php $ db_host =「localhost」; $ db_username =「root」; $ db_pass =「」; $ db_name =「a8439146_spdeal」; $連接=新的mysqli($ db_host,$ db_username,$ db_pass,$ db_name); $ db_host $ db_username $ db_pass $ db_name ?> – 2013-05-05 04:51:47

相關問題