这是一个新文件:
//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);
}
答案 0 :(得分:3)
你的getDB方法存在一个很大的问题:如果数据库存在,它什么都不返回!
它应该是:
public static function getDB()
{
if (self::$db == NULL)
{
self::$db = new self();
}
return self::$db;
}