0

学校のプロジェクトで、架空の口座情報を求めて学校のデータベースにアクセスする架空のオンライン バンキング サイトを作成しています。アカウントを表示するたびに、2 つの mysqli エラーが発生します。person.class.php の 26 行目に 1 つ、veiwaccounts.php の 52 行目に 1 つ、個人クラスでそのエラーの主な原因を追跡しましたが、どうにも修正できないようです。エラーは

警告: mysqli_query() は、パラメーター 1 が mysqli であると想定し、行 26 の .../person.class.php で指定された null
警告: mysqli_fetch_assoc() は、パラメーター 1 が mysqli_result であり、.../viewaccounts.php で指定された null であると予想します。 52行目

以下は、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;
}
4

3 に答える 3

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場合にのみnew をインスタンス化しています-呼び出しが失敗した場合は に評価され、それが新しいオブジェクトを作成する必要があるときです。$currentMemberTRUEunserialize()$currentMemberFALSE

また、最初にプロパティを割り当てましたconnection。これは、 new を作成するときに破棄されますPerson。これは、おそらく毎回行っていると思われます。

Personまた、が に保存されたかどうかをテストするロジック全体をリファクタリングする必要があります。まず、セッションはオブジェクト自体をシリアル化するため、 /$_SESSIONを呼び出す必要はありません。代わりにすべきことは、関数を定義し、オブジェクト インスタンスを に格納するだけです。serialize()unserialize()__autoload()$_SESSION

また、開発サーバーがオンになっているように見えることにも注意してくださいshort_open_tag-オフにします。現実の世界のほとんどどこでも無効になっているため、使用するのは悪い習慣です。

于 2012-06-09T22:12:32.863 に答える
1

Database接続を初期化するオブジェクトに問題があるようです。mysqliエラーは にオブジェクトを提供していないことを示しているため、接続していない可能性がありますmysli_query()

クラスの mysqli_connect_error ()およびmysqli_connect_errno()を調べてDatabase、接続中にエラーが発生したかどうかを確認し、そこから作業してください。

于 2012-06-09T22:17:41.280 に答える
1

変数personからのメンバーIDでクラスをインスタンス化しています。here [クラスのオブジェクトをインスタンス化するために値を渡す場所]$memberidの値を渡してみてください。実際に値を返すかどうかをデバッグするために使用します。オブジェクトをインスタンス化した後に配置します。ほとんどの場合、あなたの問題はここで発生しています。クラスをインスタンス化する前に、クラスのパブリック変数接続にアクセスしようとしました。$memberidpersonvar_dump$currentMember->connection = $conn;person

于 2012-06-09T22:08:01.157 に答える