来自required_once()的变量未定义,但与require()一起使用,为什么?

时间:2016-11-11 09:56:37

标签: php mysqli

我对编程很新,并且必须使网站与php7兼容。 我不想更改我需要的更多代码,因此我决定将旧的已弃用(并且不再工作)mysql_更改为较新的mysqli_ db-connection。

到目前为止一切都运行良好但是在一些脚本中我遇到了db-connection-script的require_once问题,它包含在脚本的顶部并且运行良好但是在"功能& #34;在同一个脚本中,包含的db-connection-file及其变量即使在I" include_once"再一次。

但如果我只是"包括()"它再次起作用。我的问题是,为什么? 我已经理解它包括一个文件多次没有" include_once"可能会导致问题所以我真的需要帮助来理解这个问题。

的index.php:

<?php
require_once('../../Connections/db.php');
mysqli_select_db($dbcon, $dbname);
$query = "SELECT x, y FROM dbtable WHERE z";

在同一个文件中运行良好:

function pruefe_datum($datum){

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") {
require_once('../../Connections/db.php');
$theValue = mysqli_escape_string($dbcon, $theValue);
} } }

投掷:

  

注意:未定义的变量:dbcon和警告:mysqli_escape_string()期望参数1为mysqli,给定为null

2 个答案:

答案 0 :(得分:1)

您正在使用     require_once( '../../连接/ db.php中');

在功能之外。因此Connections/db.php已经包含在内,因此即使您再次将require_once包含在内,也无法在函数内使用。

请参阅difference

解决方案:删除第二个require调用,然后将变量传递给函数:GetSQLValueString($theValue, $dbcon, ....)

答案 1 :(得分:-1)

假设您在此功能之前未关闭数据库连接,则以下情况应该起作用:

function pruefe_datum($datum){
    if (!function_exists("GetSQLValueString")) {
        function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") {
            global $dbcon; 
            $theValue = mysqli_escape_string($dbcon, $theValue);
        }
    } 
}

这是一个范围问题。 $ dbcon 变量不存在于函数内部,第二个 require_once 被忽略且不需要。