Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个查询有什么问题?为什么当地的结果不同?_Php_Mysql_Database - Fatal编程技术网

Php 这个查询有什么问题?为什么当地的结果不同?

Php 这个查询有什么问题?为什么当地的结果不同?,php,mysql,database,Php,Mysql,Database,我正在为我的一个类编写一个使用mysql数据库的php站点,我一辈子都搞不清楚它到底出了什么问题。我有一个查询在我的机器上本地工作(在与教师服务器上相同的数据库上),但当我上传它时,它不工作。问题是,即使数据库中有应该显示的信息,查询仍返回0个结果 function bigAssQuery($whereCondition) { $queries[] = 'CREATE TEMPORARY TABLE subAssignments (SELECT ua.assignmentid, ua.

我正在为我的一个类编写一个使用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);
}
然后当查询数据库时,代码如下所示

$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;
$querys=bigAssQuery($whereCondition);
$result=1;
foreach($querys作为$query查询)
{
$result=$db->query($query);
如果(!$result)
{
回声'
window.onload=function(){alert(“错误:无法提取课程信息。请稍后再试。”);}
';
出口
}
}
$num\u rows=$result->num\u rows;
我向您保证,本地和远程数据库是相同的。我看不出有什么理由没有结果。我确实测试了几个简单的临时表,以查看服务器是否出于某种原因没有读取这些表,但在我的测试中它们不是问题。我会尝试嵌套子查询,但它变得如此复杂,以至于我无法组织它。也许有更好的办法? 另外,为了澄清查询没有失败,当我知道它们应该返回时,它们没有返回任何东西。 我为文字墙道歉,但任何帮助都是感激的

编辑:我真的不知道问题出在哪些查询上。我知道我可能遗漏了一些重要的信息。部分原因在于我缺乏网络经验。我首先在本地测试,因为我已经让调试器工作了,但我真的不知道如何进行远程调试。我正在使用netbeans和xdebug。如果有人能建议如何设置远程调试,我可能会想出一些更好的数据。任何建议都会有帮助


再次编辑:发现问题。令人尴尬的是,这是一个数据输入错误;我的一把外键输入错误。谢谢大家为我指明了正确的方向

快速查看一下,您的代码不适当地停止了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
}
if(!$result)
{
回声'
window.onload=function(){alert(“错误:无法提取课程信息。请稍后再试。”);}
';
break;//仅退出循环,而不是退出PHP的执行
}

此外,单独检查每个查询,并在phpMyAdmin上分别运行它们,以查看它们是否正确执行。找到断点并修复错误。

能否尝试将其分解为实际问题?当然,您可以将范围缩小到实际失败的查询?是否可以发布一些调试数据,例如返回值?另外,您使用的数据库层是什么?您是否检查了会话是否已创建?既然你说在你的本地主机上一切都很好,我肯定收到了来自该站点的cookies,但是对于会话变量等,我不确定如何检查它们。谢谢。PhpMyAdmin是一个很好的建议。