0

別のファイルで関数を呼び出すときに mysql コマンドを実行すると問題が発生します。同じファイルにコードがある場合、正常に動作します。コードは次のようになります。

認証する:

{
    $conn = new mysqli($dbserver, "dbuser", "pass", $dbname);
    $sql = 'SELECT userId, salt, pwd, isAdmin FROM users where username = ?';
    $stmt = $conn->stmt_init();
    $stmt->prepare($sql);
    $stmt->bind_param('s', $username);
    $stmt->bind_result($userId, $salt, $storedPwd, $isAdmin);
    $stmt->execute();
    $stmt->fetch();
}

ここで、fetch の直後に関数を呼び出すと、bind_param 行で失敗します。私はそれを次のように呼びます:

updateUserActivity ($conn, $tpcLang, 'LI', $userId);

この関数の先頭は次のとおりです。

function updateUserActivity ($conn, $lang, $activityType, $userId)
{
    // check that activity is valid
    $sql = 'SELECT activityType
            FROM activityType  
            WHERE activityType = ?';
    $stmt = $conn->stmt_init();
    $stmt->prepare($sql);
    $stmt->bind_param('s', $activityType);
    $stmt->bind_result($activityTypeInDB);
    $stmt->execute();
    $stmt->fetch();

    if ($activityType == $activityTypeInDB){
        $success=1;
    } else {
       $success=0;
       $msg = $lang->get('UPDATE_USER_INVALID_ACTIVITY_ERROR_MSG') . " " . $activityType . " (" . $stmt->errno . "):  " . $stmt->error;
       error_log ($msg);
    }
    // continue on to add a row in the userActivity table
} 

bind_param で発生するエラーは次のとおりです: 無効なオブジェクトまたはリソース mysqli_stmt、および DB エラーは次のとおりです: Commands out of sync; 現在、このコマンドを実行することはできません。

どんな提案でも大歓迎です。

4

1 に答える 1

2

フェッチ後にこれを追加してみてください。

mysqli_free_result($result);

また

mysqli_close($conn);
于 2012-04-13T01:16:43.980 に答える