Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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_Mysqli - Fatal编程技术网

Php 关于非对象和未定义变量的注意事项

Php 关于非对象和未定义变量的注意事项,php,mysqli,Php,Mysqli,我试图通过在PHP中构建错误答案列表来检索每个问题的错误答案。例如,通过包含原始查询中的一行来计算错误答案,如下所示: $query = "SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionNo, an.Answer, an.AnswerId FROM Session s INNER JOIN Question q ON s.SessionId = q.SessionId JOIN Answ

我试图通过在PHP中构建错误答案列表来检索每个问题的错误答案。例如,通过包含原始查询中的一行来计算错误答案,如下所示:

 $query = "SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionNo, an.Answer, an.AnswerId 
   FROM Session s  
   INNER JOIN Question q ON s.SessionId = q.SessionId 
   JOIN Answer an ON q.QuestionId = an.QuestionId 
   WHERE s.SessionName = ? 
   ORDER BY q.QuestionId, an.Answer 
   "; 
       
   // prepare query 
   $stmt=$mysqli->prepare($query); 
   // You only need to call bind_param once 
   $stmt->bind_param("s", $assessment); 
   // execute query 
   $stmt->execute();  
   
   $specialOptionTypes = array( 
    'Yes or No' => array( 'Y', 'N' ), 
    'True or False' => array( 'T', 'F' ), 
); 

// Do this for each row: 
if ( array_key_exists( $row->OptionType, $specialOptionTypes ) ) { 
    $options = $specialOptionTypes[ $row->OptionType ]; 
} else if ( preg_match( '/^([A-Z])-([A-Z])$/', $row->OptionType, $match ) ) { 
    $options = range( $match[1], $match[2] ); 
} else { 
    // issue warning about unrecognized option type 
    $options = array(); 
} 
$right = str_split( $row->Answer );  // or explode() on a delimiter, if any 
$wrong = array_diff( $options, $right ); 



    // Fetch the results into an array 

   // get result and assign variables (prefix with db) 
   $stmt->bind_result($dbSessionId, $dbSessionName, $dbQuestionId, $dbQuestionNo, $dbAnswer, $dbAnswerId); 
      while ($stmt->fetch()) { 
         
      $incorrect_ans[] = $wrong; 

      }     
       
       
      .... 
       
      //table row 
       
      <td class="answertd" name="incorrectanswers[]"><?php
echo $incorrect_ans[$key];
?></td> 
$query=“选择q.SessionId、s.SessionName、q.QuestionId、q.QuestionNo、an.AnswerId、an.AnswerId
来自会话s
s.SessionId=q.SessionId上的内部连接问题q
加入q.QuestionId=A.QuestionId上的答案
其中s.SessionName=?
按q.QuestionId排序,A.答案
"; 
//准备查询
$stmt=$mysqli->prepare($query);
//您只需要调用bind_param一次
$stmt->bind_参数(“s”,$assessment);
//执行查询
$stmt->execute();
$specialOptionTypes=数组(
'是或否'=>数组('Y','N'),
'True或False'=>数组('T','F'),
); 
//对每行执行以下操作:
如果(数组\键\存在($row->OptionType,$specialOptionTypes)){
$options=$specialOptionTypes[$row->OptionType];
}如果(preg_match('/^([A-Z])-([A-Z])$/',$row->OptionType,$match)){
$options=范围($match[1],$match[2]);
}否则{
//发出有关无法识别的选项类型的警告
$options=array();
} 
$right=str_split($row->Answer);//或在分隔符上分解(),如果有的话
$error=数组_diff($options,$right);
//将结果提取到数组中
//获取结果并分配变量(前缀为db)
$stmt->bind_result($dbSessionId、$dbSessionName、$dbQuestionId、$dbQuestionNo、$dbAnswer、$dbAnswerId);
而($stmt->fetch()){
$error_ans[]=$error;
}     
.... 
//表行
但我遇到的问题是,我没有得到错误的答案,而是收到了几个错误:

第一个错误是任何
$row
变量的错误,该变量显示在上面的代码中,其中说明:

注意:未定义变量:中的行。。。在线

注意:正在尝试获取。。。在线

第二个问题在上面的表行中,它显示的不是错误的答案,而是
数组


我的问题是如何修复通知和数组,使其至少具有一个无错误的应用程序?

如果您没有将
$row
初始化为If语句之外的内容,那么它是未定义的


这意味着
$row
不是一个对象,在某些情况下可能是NULL或false(找不到),因为它不可访问。超出范围

啊,好的,mysqli-fetch_对象是否能够对这一个进行排序?我试图实现匹配此链接:但不确定为了能够检索错误答案,我需要做哪些更改。你对此有什么想法吗?很抱歉,我不明白你在问什么好的,我会作为一个单独的问题问。我需要更好地解释一下。谢谢你的帮助。