php - require_once 不在函数内部工作

标签 php mysql

我有两个从数据库检索值的函数。当我访问函数内部的连接($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>";
}
?>

最佳答案

考虑不需要这些函数的内部,将参数传递给那些引用数据库连接的函数会更有意义。

也这样

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

在调用使用该函数的函数之前,当需要多次执行而只需执行一次时,它更实用且开销更少。

您应该向我们展示 config.php,因为它是连接的来源,但我们假设

$connection

是在config.php中定义的,好吧,使用isset

if($isset($connection))

尽管如此,您无法确定它是否已设置。如果未设置,那么您可以访问数据库连接函数(我假设您在配置中创建了该函数)来创建新连接。

ternary operator在这里可能有用:

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

如果这不起作用,并且这是一个学校项目或类似的项目,那么您可以尝试将连接定义为可以在文件中访问的全局变量,这样您就可以在 config.json 中执行类似的操作。 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 混合在一起。

关于php - require_once 不在函数内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16381291/

相关文章:

php - Codeigniter mysql 中的 sql 查询结果为空

php - 无效使用群组功能

php - Zend Framework 2 从模块添加导航项

php - 在 php 中进行 AES 加密,然后使用 Javascript (cryptojs) 解密

php - 如何在 PHP 和 MySQL 中返回特定行?

php - 通过单击 anchor 标记将 PHP 变量发送到另一个页面

php - 字符串未插入表中

mysql - 如何获取具有求和列最大值的行

php - 下拉选择后自动填充文本字段

php - 从android应用程序向服务器发送参数