我有两个从数据库中检索值的函数。当我访问函数内的连接($connection
)时,我无法访问数据库。我正在使用mysql + PHP
这是代码:
<?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 :(得分:1)
考虑不要求在这些函数内部,将参数传递给那些作为数据库连接引用的函数会更有意义。
所以
require_once('../config.php');
在调用使用该函数的函数之前,当需要多次执行此函数时,它会更加实用并且开销更少。
您应该向我们展示config.php,因为它是连接的来源,但让我们假设
$connection
在config.php中定义,好吧,使用isset
if($isset($connection))
然而,您无法确定它是否已设定。如果未设置,那么您可以访问数据库连接功能,我假设您在配置中创建了一个新连接。
ternary operator在这里可能很有用:
$connection = if(isset($connection)) ? $connection : newConnection();
如果这不起作用,这是一个学校项目或类似的东西,那么你可以尝试将连接定义为可以在你的文件中访问的全局变量,所以你可以在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混合在一起。