我尝试使用之前项目中使用的功能连接到我的数据库。我唯一改变的是,我添加了一个loader.php文件。
loader.php
我已经让这个加载器包含我的文件,从根路径开始,因为我在处理不同目录中的多个页面时遇到了一些相对路径问题。
<?php
function includeFile($path) {
include ( $_SERVER['DOCUMENT_ROOT'] . '/include/'.$path);
}
function requireFile($path) {
require ( $_SERVER['DOCUMENT_ROOT'] . '/include/'.$path);
}
function includeFileOnce($path) {
include_once ( $_SERVER['DOCUMENT_ROOT'] . '/include/'.$path);
}
?>
包含/后端/ db_config.php
<?php
/**
* database login details
*/
define("HOST", "localhost");
define("USER", "****");
define("PASSWORD", "****");
define("DATABASE", "****");
define("SECURE", FALSE); //development purposes
?>
包含/后端/ db_connect.php
<?php
include_once dirname(__FILE__) . '\db_config.php';
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
?>
包含/后端/ url_translator.php
<?php
include_once dirname(__FILE__) . '\db_connect.php';
function getUrl($mysqli) {
if($stmt = $mysqli->prepare("SELECT english, dutch FROM url_translation")) { //line 5
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($english, $dutch);
$stmt->fetch();
echo $english . "<br>";
echo $dutch . "<br>";
}
}
?>
examplePage.php 当只使用include()时,一切正常,我从查询中获得结果。但是当我使用includeFile()时;我在下面列出了2个错误。
<?php
include( $_SERVER['DOCUMENT_ROOT'] . '/loader.php' );
//include('../backend/url_translator.php'); //works
includeFile('backend/url_translator.php'); //function from loader.php doesn't work
?>
<html>
<head>
</head>
<body>
<?php
getAllUrl($mysqli); //line 12
?>
</body>
</html>
访问examplePage时错误
Notice: Undefined variable: mysqli in C:\xampp\htdocs\projectname\en\examplePage.php on line 12
Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\projectname\include\backend\url_translator.php on line 5
可以通过添加全局$ mysqli来修复第一个错误;在url_translator.php。但是我通过参数传递了$ mysqli。
为什么在使用函数包含文件而不是仅仅使用include()时会有不同的反应?
我只能想到它可能是一个范围问题,但我不知道如何解决它。
答案 0 :(得分:0)
在examplePage.php中调用$_SERVER['DOCUMENT_ROOT'] . '/include/' . $path
时,您能否回复includeFile()
的值?