在null上调用成员函数query()

时间:2015-07-24 08:39:56

标签: php html sql

这是一个新文件:

//Products.php
<h1>Products</h1>
<?php

$res = IA::printAll();
if (!empty($res))
{
    $i = 0;
    foreach ($res as $item)
    {
        echo $item[$i];
        $i++;
    }
}
if (User::isLogged())
{
    $ids = IA::getIDs();
    echo "<form name='productpf' method='POST' action='index.php'>
          <select name='id'>";
            if (!empty($ids))
            {
                $a = 0;
                foreach ($ids as $item)
                {
                    echo "<option value = $item[$a]>$item[$a]</option>";
                    $a++;
                }
            }
    echo"</select>
         <input type='submit' name='addcart' value='Add To Cart' size='30'>
         </form>";
}

?>

好了,现在问题是,致命错误:在第41行的C:\ xampp \ htdocs \ InternetApplications \ Classes \ IA.php中调用null上的成员函数query()正在发生。所以这是在IA.php上调用的两个函数:

        //IA.php
        public function get()
        {
            $db = MySQL::getDB();
            $sql = "SELECT * FROM ia";
            $res = $db->query($sql); //------------->LINE 41<--------------
            return $res;
        }

        public static function printAll()
        {
            $p = new IA();
            $res = $p->get();
            $nrows = $res->num_rows;
            $array = array();
            for($i = 0;$i < $nrows; $i++)
            {
                $pdb = $res->fetch_object();
                $array[] = array($i => "<div style='border-style:groove' style='border:5px solid gray'>
                        <p>id: '$pdb->id' </p>
                        <p>name: '$pdb->name' </p>
                        <p>type: '$pdb->type' </p>
                        <p>description: '$pdb->description' </p>
                        <p>price: '$pdb->price'</p>
                        </div>");
            }
            $res->free();
            return $array;
        }

        public static function getIDs()
        {
            $p = new IA();
            $res = $p->get();
            $nrows = $res->num_rows;
            $array = array();
            for($i = 0;$i < $nrows; $i++)
            {
                $pdb = $res->fetch_object();
                $array[] = array($i => $pdb->id);
            }
            $res->free();
            return $array;
        }

现在奇怪的是,正如你所看到的,上面的两个函数都调用了get()方法,只有第二个函数被调用才会产生错误。在这种情况下,第二个被调用的是getIDs(),因此这是不发送任何输出的函数。如果我切换顺序并首先放入getIDs(),它可以工作但第二个,printAll()因此没有输出。以下是MySQL类中的最后两个方法,它们都由函数get():

调用
//MySQL.php
public static function getDB()
    {
        if (self::$db == NULL)
        {
            return self::$db = new self();
        }
    }

public function query($sql)
    {
        $res = $this->conn->query($sql);
        if (!$res) 
        {
            echo $this->conn->error;
        }
        return($res);    
    }

1 个答案:

答案 0 :(得分:3)

你的getDB方法存在一个很大的问题:如果数据库存在,它什么都不返回!

它应该是:

public static function getDB()
{
    if (self::$db == NULL)
    {
        self::$db = new self();
    }
    return self::$db;
}