2013-05-05 104 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

相关问题