1

次のコードにはいくつかの問題があります...基本的に、いくつかの値を$sqlBAnswerに格納する必要がありますが、単に[]をその後に置くと、値"Array"が保存されます。

//Find the answer given by the user to the last answered question
$sqlB = mysql_query("SELECT Answer FROM Responses WHERE User = $sqlAPKID");
//If the operation produces an error, output an error message
if (!$sqlB) {
    die('Invalid query for SQLB: ' . mysql_error());
}
//Count the number of rows output
$sqlBCount = mysql_num_rows($sqlB);
//If rows exist, define the values
if ($sqlBCount > 0) {
    while ($row = mysql_fetch_array($sqlB)) {
        $sqlBAnswer = $row["Answer"];
    }
}

$sqlBAnswerが複数の値を保持できたと仮定すると、値を 1 つだけ生成する別のクエリを実行する必要があります (つまり、$sqlBAnswerに格納されている値の 1 つだけが結果セットに含まれます。

次のコードのforeachループを使用してこれを行う予定です。

//Find the number of the next question to be answered based on the user's previous answer and the question they answered
$sqlC = mysql_query("SELECT NextQuestion FROM Answers WHERE QuestionNumber = $sqlALastQuestionAnswered AND PKID = $sqlBAnswer");
//If the operation produces an error, output an error message
if (!$sqlC) {
    die('Invalid query for SQLC: ' . mysql_error());
}
//Count the number of rows output
$sqlCCount = mysql_num_rows($sqlC);
//If rows exist, define the values
if ($sqlCCount > 0) {
    while ($row = mysql_fetch_array($sqlC)) {
        $sqlCNextQuestion = $row["NextQuestion"];
    }
}

最後に必要なのは 1 つの値とsqlCNextQuestionのみの 1 つの値ですが、ドキュメントをどれだけ読んでも、キーと値などについて頭を悩ませることはできません。誰かが私が求めているものをどのように達成できるかを説明して見せてくれたら、とても感謝しています!

ありがとう :)

4

2 に答える 2

3

現時点では、コードの $sqlBAnswer は配列ではなく、通常の変数です。あなたのコード:

if ($sqlBCount > 0) {
    while ($row = mysql_fetch_array($sqlB)) {
        $sqlBAnswer = $row["Answer"];
    }
}

クエリ結果の行を単純にループし、すべての行で $row["Answer"] の値を $sqlBAnswer に再割り当てします。

これらの値を配列に保存する場合は、次のようにします。

$sqlBAnswer = array(); //that creates a blank array to assign values to
if ($sqlBCount > 0) {
    while ($row = mysql_fetch_array($sqlB)) {
        $sqlBAnswer[] = $row["Answer"]; //note the '[]', which tells php to add the new value to the array
    }
}

次に、次の方法で foreach を実行できます。

foreach($sqlBAnswer as $value){
    // use your code with $sqlBAnswer substituted by $value
}

ただし、最終的に必要な $sqlCAnswer の値をどのように選択するかについては、正確に何を答えてほしいかを十分に説明していません。このコードは $sqlBAnswer のすべての値をループし、おそらく $sqlCAnswer の多くの値を生成します (データベースによって異なります)。そのため、質問を絞り込むか、その問題を解決する方法を自分で見つける必要があります。

于 2013-01-29T09:33:09.303 に答える
0

問題1の解決策

$sqlBAnswer = $row["Answer"];

する必要があります

$sqlBAnswer[] = $row["Answer"];

「配列」を格納するだけだとおっしゃいました。しかし、それは正しくありません。ここで間違ってアクセスしているというだけで、配列が適切に作成されます

$sqlC = mysql_query("SELECT NextQuestion FROM Answers WHERE QuestionNumber = $sqlALastQuestionAnswered AND PKID = $sqlBAnswer");  // No index being provided for array access

あなたが言及したようにforeachでは、これは次のようになります

foreach($sqlBAnswer as $ans)
{
$sqlC = mysql_query("SELECT NextQuestion FROM Answers WHERE QuestionNumber = $sqlALastQuestionAnswered AND PKID = $ans");
}
于 2013-01-29T09:30:50.570 に答える