Mysqli_query和mysqli_fetch_assoc为空

时间:2012-06-09 21:58:05

标签: php mysqli

对于一个学校项目,我正在创建一个想象中的网上银行网站,该网站可以在学校搜索虚拟账户信息。每次我查看帐户时,我都会收到两个mysqli错误。在person.class.php的第26行和veiwaccounts.php第52行的另一个我在我的人类中追踪了该错误的主要原因但似乎无法以任何方式修复它。错误是

  

警告:mysqli_query()要求参数1为mysqli,在第26行的... / person.class.php中给出null   警告:mysqli_fetch_assoc()期望参数1为mysqli_result,在第52行的... / viewaccounts.php中给出null

以下是viewaccounts.php文件中的一些代码示例:

if($currentMember)
{
    $currentMember = new Person($memberid);
    $accounts =  $currentMember->retrieve_all_accounts();

    //HERE IS WHERE THE PROBLEM IS $accounts = $currentMember->retrieve_all_accounts(); 

    //Loop through accounts
    while($account = mysqli_fetch_assoc($accounts)) {
        //Retrieve balance
        $bankaccount = new Bankaccount($account['BankAccountID']);
        $bankaccount->connection = $conn;
        $balance = mysqli_fetch_assoc($bankaccount->retrieve_current_balance());

以下是person类文件的代码:

public function retrieve_all_accounts() {
    $accounts_query = "SELECT BankAccountID FROM BankAccount WHERE UserID = " .$this->memberid;
    $result = mysqli_query($this->connection, $accounts_query);
    return $result;
}

3 个答案:

答案 0 :(得分:1)

您正在使用person变量中的成员ID来实例化您的$memberid课程。尝试传递$memberid的值[在传递值的地方,以实例化类person的对象]并使用var_dump来调试它是否真正返回任何值。 并在实例化对象后放置$currentMember->connection = $conn;。最有可能是你的问题在这里引起的。您在实例化之前尝试访问类person的公共变量连接。

答案 1 :(得分:1)

更改

    //Accounts
    $currentMember->connection = $conn;

    //instantiating class here since suggested code from video fails to do it.


if($currentMember)
{
    $currentMember = new Person($memberid);
    $accounts =  $currentMember->retrieve_all_accounts();

}else
{
    echo "<p>not working</p>";
}

if(!$currentMember) {
  $currentMember = new Person($memberid);
}
$currentMember->connection = $conn;
$accounts =  $currentMember->retrieve_all_accounts();

为了便于阅读,我还将其转换为第一个PHP代码块。

仅当Person评估为$currentMember时才会实例化新的TRUE - 如果unserialize()调用失败$currentMember将评估为FALSE ,那就是你应该创建一个新对象。

此外,您首先分配了connection属性,当您创建新Person时,该属性将被销毁,您可能每次都会这样做,否则您会看到更多警告。

您还应该重构测试Person是否已保存在$_SESSION中的整个逻辑 - 开始时,会话将自行序列化对象,因此您不需要调用serialize() / unserialize()。你应该做的是定义一个__autoload()函数,只需将对象实例存储在$_SESSION中。

我还注意到你的开发服务器似乎有short_open_tag - 关闭它,使用它是不好的做法,因为它在现实世界的任何地方都被禁用。

答案 2 :(得分:1)

您的Database对象初始化连接时看起来有问题。它可能没有连接,因为错误表明您没有向mysqli提供mysli_query()个对象。

尝试查看Database课程中的mysqli_connect_error()mysqli_connect_errno(),以确定连接和工作时是否出现错误。