0

私は私のクラスのmysqlデータベースを使用してphpサイトを書いていますが、私の人生の中で何が悪いのかを理解することはできません。自分のマシンでローカルに(教師のサーバー上のデータベースと同じデータベースで)機能するクエリがありますが、アップロードすると機能しません。問題は、データベースに表示されるべき情報が含まれていても、クエリが0の結果を返すことです。

function bigAssQuery($whereCondition)
{

    $queries[] = 'CREATE TEMPORARY TABLE subAssignments (SELECT ua.assignmentid, ua.assignmentnum, ua.description
                    FROM Course c JOIN UserAssignment ua ON ua.crn = c.CRN AND ua.term = c.term
                    WHERE c.CRN = "'.$_SESSION["crnum"].'" AND c.term = "'.$_SESSION["mysem"].'")';

    $queries[] = 'CREATE TEMPORARY TABLE subStudents (SELECT s.studentid, s.lastname, s.firstname
                    FROM Course c JOIN Student s ON s.crn = c.CRN AND s.term = c.term
                    WHERE c.CRN = "'.$_SESSION["crnum"].'" AND c.term = "'.$_SESSION["mysem"].'")';

    $queries[] = 'CREATE TEMPORARY TABLE subRubric(SELECT assignmentid, re.rubricelementid, re.learning_goal_char
                    FROM RubricElement re JOIN RubricAssignmentRelation rar ON re.rubricelementid = rar.rubricelementid)';

    $queries[] = 'CREATE TEMPORARY TABLE subAssignRub(SELECT subAssignments.assignmentid, rubricelementid, learning_goal_char, assignmentnum, description
                    FROM subRubric JOIN subAssignments ON subAssignments.assignmentid = subRubric.assignmentid)';

    $queries[] = 'CREATE TEMPORARY TABLE subAssignRubStud (SELECT *
                    FROM subAssignRub CROSS JOIN subStudents)';

    $queries[] = 'CREATE TEMPORARY TABLE subAssignInstRubStud (SELECT sars.assignmentid, ai.ainstanceid, rubricelementid, learning_goal_char, assignmentnum, description, sars.studentid, lastname, firstname
                    FROM subAssignRubStud sars LEFT JOIN AssignmentInstance ai ON sars.studentid = ai.studentid AND sars.assignmentid = ai.assignmentid)';

    $queries[] = 'CREATE TEMPORARY TABLE subTotal (SELECT assignmentid, siars.ainstanceid, s.ainstanceid As scoreAID, siars.rubricelementid, learning_goal_char, assignmentnum, description, studentid, lastname, firstname, score
                    FROM subAssignInstRubStud siars LEFT JOIN Score s ON siars.ainstanceid = s.ainstanceid AND siars.rubricelementid = s.rubricelementid
                    ORDER BY lastname, assignmentid)';

    $queries[] = 'SELECT *
        FROM subTotal
        '.$whereCondition.' Order By lastname, assignmentnum, learning_goal_char';  

    return($queries);
}

次に、dbが照会されると、コードは次のようになります。。。

$queries = bigAssQuery($whereCondition);


$result = 1;
foreach($queries as $query)
{
    $result = $db->query($query);

    if(!$result)
    {
        echo '<script type="text/javascript"> 
                window.onload=function(){ alert("Error: Could not extract course information. Please try again later."); } 
             </script> ';
        exit;
    }
}

$num_rows = $result->num_rows;

ローカルデータベースとリモートデータベースは同一であることを保証します。結果が返ってこない理由はわかりません。いくつかの単純な一時テーブルをテストして、サーバーが何らかの理由でそれらのテーブルを読み取っていないかどうかを確認しましたが、テストでは問題にはなりませんでした。ネストされたサブクエリを試してみますが、非常に複雑になり、整理できなくなります。たぶんもっと良い方法がありますか?また、クエリが失敗していないことを明確にするために、私が知っているときにクエリが何も返さないだけです。テキストの壁をお詫び申し上げますが、ご協力いただければ幸いです。

編集:問題がどのクエリにあるのか本当にわかりません。私はおそらくいくつかの重要な情報が不足していることを知っています。その一部は私のウェブの経験不足にあります。デバッガーが機能しているので、最初にローカルでテストしますが、正直なところ、リモートデバッグの方法がわかりません。私はnetbeansとxdebugを使用しています。誰かがリモートデバッグを設定する方法を提案できれば、私はおそらくいくつかのより良いデータを思い付くことができるでしょう。どんな提案も役に立ちます

もう一度編集:問題が見つかりました。恥ずかしいことに、それはデータ入力のエラーでした。私の外部キーの1つが間違って入力されました。私を正しい方向に向けてくれてありがとう。

4

1 に答える 1

1

ざっと見てみると、コードがPHPの実行を不適切に停止しています。少なくとも残りの部分を続行させる必要があります。break;代わりにを使用してループを終了するだけです。

if(!$result)
{
    echo '<script type="text/javascript"> 
            window.onload=function(){ alert("Error: Could not extract course information. Please try again later."); } 
         </script> ';
    break; //exit the loop only NOT THE PHP's Execution
}

さらに、すべてのクエリを個別にチェックし、phpMyAdminで個別に実行して、正しく実行されているかどうかを確認します。ブレークポイントを見つけて、エラーを修正します。

于 2012-05-07T03:19:45.720 に答える