別のファイルで関数を呼び出すときに 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; 現在、このコマンドを実行することはできません。
どんな提案でも大歓迎です。