私は私のクラスの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つが間違って入力されました。私を正しい方向に向けてくれてありがとう。