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

时间:2017-07-06 19:32:04

标签: php html mysql pdo

我正在尝试使用配置文件中的数据库凭据运行查询,但我不断收到以下错误: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中的凭据连接到数据库。

2 个答案:

答案 0 :(得分:2)

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

function getAddress($conn) 

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

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

echo getAddress($conn);

$conn这是您所包含文件的成功连接。这将使连接进入函数的范围,如果其他条件相同,则查询应该成功。

答案 1 :(得分:0)

尝试做

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