我正在尝试使用配置文件中的数据库凭据运行查询,但我不断收到以下错误:Uncaught Error: Call to a member function prepare() on null
config.php文件:
$host = 'xxxx';
$dbname = 'xxxx';
$username = 'xxxx';
$password = 'xxxx.';
try {
$conn = new PDO("mysql:host=$host; dbname=$dbname;", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "$e->getMessage()";
}
的functions.php
session_start();
include 'config.php';
function getAddress(){
$output = "";
if (isset($_SESSION['userid'])){
$userid = $_SESSION['userid'];
try {
$stmt = $conn->prepare('SELECT address FROM users WHERE id = :userid');
$stmt->bindParam(':userid', $userid);
$stmt->execute();
$result = $stmt -> fetch();
if(empty($result)){
$output = "Your information cannot be retrieved";
} else {
$output = $result['address'];
}
} catch (PDOException $e) {
$output = $e->getMessage();
}
$conn = null;
} else {
$output = "An error has occured, please try again";
}
return $output;
}
index.php(html page)
<?php
session_start();
include 'functions.php';
?>
...
<p><?php echo getAddress();?></p>
...
所以我的索引页面从functions.php脚本运行一个函数(getAddress()
),该脚本使用存储在config.php中的凭据连接到数据库。
答案 0 :(得分:2)
由于函数调用的范围,您需要传递与函数的连接。首先,设置函数调用以接收连接:
function getAddress($conn)
$conn
这里只是变量的一个方便名称,它将使用你在函数中所拥有的内容。将连接传递给函数是在函数中使连接可用的首选方法。应避免使用global
关键字。
现在,使用已建立的连接变量调用该函数:
echo getAddress($conn);
$conn
这是您所包含文件的成功连接。这将使连接进入函数的范围,如果其他条件相同,则查询应该成功。
答案 1 :(得分:0)
尝试做
function getAddress()
{
global $conn;
// rest of code
}