PHP PDO - 未捕获的错误:在 null 上调用成员函数 prepare()



>我正在尝试使用配置文件中的数据库凭据运行查询,但不断收到以下错误:Uncaught Error: Call to a member function prepare() on null

配置文件.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()";
}

函数.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;
}

索引.php (HTML 页面(

<?php 
session_start();
include 'functions.php';
?>
...
<p><?php echo getAddress();?></p>
...

所以我的索引页从函数.php脚本运行一个函数(getAddress()(,该脚本使用存储在 config.php 中的凭据连接到数据库。

由于函数调用的范围,您需要传入与函数的连接。首先,设置函数调用以接收连接:

function getAddress($conn) 

$conn这里只是变量的一个方便的名称,它将使用您在函数中的位置。将连接传递给函数是使连接在函数中可用的首选方法。应避免使用global关键字。

现在,使用已建立的连接变量调用该函数:

echo getAddress($conn);

$conn这是您包含的文件的成功连接。这会将连接置于函数的作用域中,如果所有其他条件相同,则查询应该成功。

尝试做

function getAddress()
{
global $conn;
// rest of code
}

最新更新