我对编程很新,并且必须使网站与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
答案 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 被忽略且不需要。