Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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
Javascript 当从返回的mysqli查询结果中访问特定内容时,PHP返回空json数组_Javascript_Php_Mysql_Arrays_Mysqli - Fatal编程技术网

Javascript 当从返回的mysqli查询结果中访问特定内容时,PHP返回空json数组

Javascript 当从返回的mysqli查询结果中访问特定内容时,PHP返回空json数组,javascript,php,mysql,arrays,mysqli,Javascript,Php,Mysql,Arrays,Mysqli,我最近遇到了一个问题。几个月前,我开发了这段代码,它还在工作,现在我又试着运行代码,但它根本不工作。我会解释的 我有一个javascript文件,它将数据查询到一个php文件,该文件应该以内部联接的形式查询来自3个表a、B和C的数据。就像我之前所说的,现在它只是返回并出错到我的javascript中,因为它返回并为空数组,并在我的javascript中给出JSON.parse错误 好的,接下来,每当我推送从表A和B获得的数据时,php都会返回一个完整的数组,但是如果我推送表C的结果,我的php会

我最近遇到了一个问题。几个月前,我开发了这段代码,它还在工作,现在我又试着运行代码,但它根本不工作。我会解释的

我有一个javascript文件,它将数据查询到一个php文件,该文件应该以内部联接的形式查询来自3个表a、B和C的数据。就像我之前所说的,现在它只是返回并出错到我的javascript中,因为它返回并为空数组,并在我的javascript中给出JSON.parse错误

好的,接下来,每当我推送从表A和B获得的数据时,php都会返回一个完整的数组,但是如果我推送表C的结果,我的php会返回一个空数组。我已经试着运行我的sql来检查它是否是错误的,我的sql查询在我的控制台上运行良好。这非常令人沮丧,因为我看到结果是从3个表的控制台上返回的,但是如果我尝试从php文件中获取它们,如果它包含表A和表B中的数据,它将返回一个数组,但是只要我包含表C中的结果,它就会返回空的

我以前也遇到过这种情况,但我无法找到并回答为什么会发生这种情况,因为在某些文件中,当我查询多个表(最多5个表)时,它确实可以工作,但在某些文件中它根本不起作用

以下是我的php代码:

<?php
if(!isset($_POST['Select']))
die("You Do Not Have Permission To Access This File");

require_once 'DB_Connect.php';
$db = new DB_Connect();
$conn = $db->connect();


$sql = "SELECT AssignedStudent.Student_ID, Programs.name, Student.name As StName, Student.email FROM AssignedStudent INNER JOIN Programs ON AssignedStudent.Programs_ID = Programs.ID INNER JOIN Student ON AssignedStudent.Student_ID = Student.ID WHERE AssignedStudent.status='Active' ORDER BY Programs.name, AssignedStudent.Student_ID ASC";
$resultsAssigned = mysqli_query($conn, $sql);

$data = array();
$data2 = array();
if(mysqli_num_rows($resultsAssigned)>0){

    while($row = mysqli_fetch_assoc($resultsAssigned)) {

        $StProgam = $row["name"];
        $StID = $row["Student_ID"];
        //$StName = $row["StName"];
        //$StEmail = $row["email"];
        $StName = "das";
        $StEmail = "das";

        //echo $StName."-".$StEmail."\n";
        array_push($data, array("ProgramName"=>$StProgam,"StudentID" => $StID, "StudentName" => $StName, "StudentEmail" => $StEmail));
        //$data[] = array("ProgramName"=>$StProgam,"StudentID" => $StID, "StudentName" => $StName, "StudentEmail" => $StEmail);

    }   
}
echo json_encode($data);
?>

您说它可以在一台服务器上运行,但不能在本地服务器上运行。两者之间有些不同,可能是在PHP配置中,也可能是在MySQL设置中。但这可能很难诊断,除非你知道从它工作到现在发生了什么变化

更简单的方法可能是对PHP脚本进行一些简单的调试

尝试直接从浏览器调用php文件(您必须注释掉安全检查),并添加一些调试echo语句

我的建议是在while循环中添加一个调试行,并使用print\r回显$row变量:

echo "<p>row:<pre>".print_r($row,true)."</pre></p>\n";
echo“行:“.print\r($row,true)。”

\n”;
然后,在while循环结束时,回显$data数组:

mysqli_set_charset($conn, "utf8");
echo“数据:“.print\r($data,true)。”

\n”;

在SQL语句中,可以别名一个字段(StName),但不能别名电子邮件字段。查看上面第一个echo返回的内容将确认查询返回的字段名。查看第二次回波的结果可能会发现您所期望的结构存在一些差异。在测试期间,您可能希望在SQL语句中添加一个limit 0,4语句,以将结果限制在可管理的输出大小。

经过一些挖掘,我发现我的php存在的问题是,从数据库返回的一些记录包含一些json_编码不支持的字符,因此,我所做的是在与服务器建立连接后添加了以下行:


问题解决了,它返回了我所有的记录。

在json_编码之前,数据的内容是什么?请记住,对象不能是json_编码的。@DainisTools对象可以是json_编码的(属性可以)在检查行数的if之前尝试运行
mysqli_存储结果($conn)
returned@RiggsFolly对不起,我想说的是资源。资源不能是json_encodedOk@riggsfully我在IF语句之前尝试了mysqli_store_结果($conn),没有肯定的结果,我的问题仍然存在。没有结果被返回,但感谢大家的提醒,我不知道mysqli_商店的结果。我应该经常更新。好的,我也尝试过直接运行脚本,但是没有结果。正如我前面提到的,当我从StName和email中推送数据时,问题就开始了。如果我在任何情况下包含这两条记录,我的数组似乎都不会返回。有趣的是,我打印了你建议的内容,并且它确实将数据保存在数组中。所以问题并不在于它不会推送数据,问题在于无论何时包含这两个字段,echo json_encode($data)都不起作用。好吧,我看到了一些新的东西,如果我将查询限制在某些记录上,它会输出数组。事实证明,如果我将查询限制为最多23条记录,echo json_encode($data)就可以工作了!任何数字都不能返回结果。几个月前,这个srcipt返回了200多条记录,事实上它在在线服务器上就是这样做的。那么现在是什么导致了这个问题呢。可能是我本地xampp的mysql或apache配置不好,甚至是我计算机的端口配置不好吗?您是否设置了PHP错误报告,以便看到任何问题?
mysqli_set_charset($conn, "utf8");