完整示範 PHP 答題類應用的取題介面:從 114 題中隨機抽取 5 題、檢查每日作答次數、記錄作答歷史並回傳題目與答案供前端驗證。
mt_rand(1,114) 不重複抽取 5 題 IDanswer_surplus,不足則回傳錯誤zaszh_answer 記錄本次作答的 5 題 ID,取得 answer_idanswer_id 回傳 JSONwhile (sizeof($question_id) < 5) {
$num_rand = mt_rand(1, 114);
if (!in_array($num_rand, $question_id)) $question_id[] = $num_rand;
}
$mysqli->query("UPDATE zaszh_user SET answer_surplus=answer_surplus-1
WHERE id={$user_id} AND answer_surplus>0");
$stmt = $mysqli->prepare("SELECT question,A,B,C,D,answer
FROM zaszh_question WHERE id IN (?,?,?,?,?)");
$stmt->bind_param('iiiii', ...$question_id);
$stmt->execute();
$stmt->bind_result($question,$A,$B,$C,$D,$answer);
while ($stmt->fetch()) {
$rows[] = compact('question','A','B','C','D','answer');
}
$stmt = $mysqli->prepare("INSERT INTO zaszh_answer
(user_id,question1,question2,question3,question4,question5,create_date)
VALUES (?,?,?,?,?,?,UNIX_TIMESTAMP(NOW()))");
$stmt->bind_param('iiiiii', $user_id, ...$question_id);
$stmt->execute();
$answer_id = $stmt->insert_id;
echo json_encode(array_merge($rows, ['answer_id' => $answer_id]));