未捕获错误:在blablabla中调用null上的成员函数prepare()

时间:2017-09-17 13:52:03

标签: php mysql sql pdo

我正在创建一个文件来向我的Android应用程序显示我的数据库列表,但它让我犯了这个错误:

$.ajax({
  url: "username.php?page=" + page,
  success: function(username){
    $('.twbs-content-default').text("Username: " + username);
}});

我不知道我的错误发生在哪里这是我的三个文件。

此文件将以json格式保存数据,以便安装 getstudentlist.php

<br />
<b>Fatal error</b>:  Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\file_location\file_location\file_location\sql.php:40
Stack trace:
#0 C:\xampp\htdocs\android_p\function\getstudentlist.php(12): classes\server\sql-&gt;get_student_list()
#1 {main}
  thrown in <b>C:\xampp\htdocs\android_p\classes\server\sql.php</b> on line <b>40</b><br />

这个将执行所有sql命令
sql.php

<?php 
error_reporting( E_ALL );

include("../root/root.php");

use \classes\server\sql;

header("Content-Type: application/json");

$sql = new sql();

if($sql->get_student_list() != "")
{
    $list = $sql->get_student_list();
    echo "{\"students\":";
    echo json_encode($list);
    echo "}";
}
else
{
    echo "no data output!";
}

 ?>

最后这个文件将与服务器连接 的config.php

<?php 
namespace classes\server;
use \PDO;

class sql extends config
{
    private $con = null;
    private $sql = null;
    private $db = null;

    public function __construct()
    {
        if($this->connection() != false)
        {
            $this->con = $this->connection();
        }
        else
        {
            $this->con = $this->connection_error();
        }
    }

    private function db_open()
    {
        return $this->con;
    }

    private function db_close()
    {
        return $this->con = null;
    }

    public function get_student_list()
    {
        try
        {
            $this->sql = "SELECT * FROM tbl_students
                          ORDER BY stu_lname DESC;";

            $this->db = $this->db_open()->prepare($this->sql);
            $this->db->execute();
            $this->db->setFetchMode(PDO::FETCH_ASSOC);

            $count_get_list = 0;

            while($data = $this->db->fetchAll())
            {
                $getdata[] = $data;
                $count_get_list++;
            }

            if($count_get_list > 0) { return $getdata; } else { return ""; }

            $this->db_close();
        }
        catch(PDOException $x)
        {
            echo $this->connection_error();
        }
    }
}
 ?>

无需显示我的root.php文件导致该文件的作业只是连接所有文件。
希望你们能帮助我! 这意味着我很多。

1 个答案:

答案 0 :(得分:1)

第一次调用get_student_list()会将$con变量设置为null,因此在第二次调用期间会出现错误消息。可能值得将get_student_list()的输出保存在变量中,然后随后使用变量...或者更改数据库类不要关闭连接。