0

PHPスクリプトから呼び出しているmysqliクエリに問題があります。何度も書き直して、「mysqli num_rowsコマンドが同期していません。現在、このコマンドを実行できません」というエラーが表示され続けます。これは、このページからデータベースにアクセスする最初の試みです。以前はパラメーターをバインドしてから、$ checkAcct-> num_rows()を呼び出して、同じ問題が発生していました。また、このサイトの別の投稿で誰かが提案したことを試しました。do {$ checkAcct-> use_result(); } while($ checkAcct-> next_result()); しかし、これも機能せず、同じエラーが発生しました。これらの詳細を持つユーザーがデータベースに含まれていないことを確認した後、別のクエリを実行してユーザーの情報をサイトに挿入しますが、ここで表示されるエラーメッセージはこのクエリに関連しています。

以下は私が使おうとしているコードです:

$checkAcct = $dbConn->stmt_init();
$existingAcct = array();

if ($checkAcct->prepare("select usrName, eAddy from usr where usrName = ? OR eAddy = ?"))
{
    $checkAcct->bind_param("ss", $usr, $eml);
    $checkAcct->execute();
    $checkAcct->bind_result($result);
    while($checkAcct->fetch())
    {
        $existingAcct[] = $result;
    }
    if ($existingAcct[0] != 0)
    {

        if ($usr == $inputs['usrName'] && $eml == $inputs['eAddy'])
        {
            $acctSetupErrors[] = "Someone with your username and email address already exists. Please use the forgot password form to reset your password";     
        } else if ($eml == $inputs['eAddy'])    {
            $acctSetupErrors[] = "Someone with your email address already exists. Please use the forgot password form to reset your password or setup an account with a different email address";       
        } else {
            $acctSetupErrors[] = "Someone with your username already exists. Please choose a different username";
        }
    } 

    $checkAcct->free_result();
    $checkAcct->close();

編集

大丈夫。私はあなたのやり方を試しましたが、それもうまくいきませんでしたので、以前のdb呼び出しを探しに行きました。スクリプトの上位にリンクされているインクルードファイルのdb呼び出しで、問題のあるクエリが見つかりました。おかしい、それは他のどこでも問題を引き起こしたことはありませんが、今私は結果を解放し、それはうまく機能します。これであなたの助けをありがとう。コードの上のどこかにあるはずだと示唆するためにあなたを賛成するのに十分なポイントがありません。

4

1 に答える 1

0

上記のコードをこのように変更して、何が得られるかを確認できますか

$checkAcct = $dbConn->stmt_init();
$existingAcct = array();

if ($checkAcct->prepare("select usrName, eAddy from usr where usrName = ? OR eAddy = ?"))
{
    $checkAcct->bind_param("ss", $usr, $eml);
    $checkAcct->execute();
    $checkAcct->store_result();
    printf("Number of rows: %d.\n", $stmt->num_rows);
    $checkAcct->free_result();
    $checkAcct->close();
}

また、準備バッファがクリアされていることを確認してから、再度使用してください。このステートメントがmysqliプリペアドステートメントバッファでまだアクティブである前に実行される他のクエリがあることを願っています。

于 2012-10-05T01:42:28.730 に答える