如果值为null,则不执行插入操作


It does not do an insert if null value

我试图在数据库中插入每个问题的每个答案。问题是,一个问题可能没有答案,所以我尝试了下面的代码,但如果一个问题没有答案,它不会插入数据库行,我试图做的是,如果没有答案,那么在该问题的Answer列下显示字符串No Answer

 $answersql = "INSERT INTO Answer (QuestionId, Answer) 
    VALUES (?, ?)";
if (!$insertanswer = $mysqli->prepare($answersql)) {
    // Handle errors with prepare operation here
    echo __LINE__.': '.$mysqli->error;
}
if( $insert && $insertanswer)
{
    $c = count($_POST['numQuestion']);
    $question_ids = array();
    for($i = 0;  $i < $c; $i++ )
    {
... //Question INSERT goes here
        $questionId = $mysqli->insert_id;
            $question_ids[$questionNo] = $questionId;
}
        $results = $_POST['value'];
        foreach($results as $id => $value) 
        {
            $answer = $value;
            $quesid = (int)$question_ids[$id];   
            foreach($value as $answer) 
            {
            if($answer == '' || $answer === null){
                $answer = 'No Answer';
            }
                $insertanswer->bind_param("is", $quesid, $answer);
                $insertanswer->execute();
                if ($insertanswer->errno) {
                    // Handle query error here
                    echo __LINE__.': '.$insertanswer->error;
                    break 7;
                }
            }
        }

    //close your statements at the end

    $insertanswer->close();
}

['value']来自一个输入:

var $newBtn = $(("<input class='answerBtnsRow answers' type='button' style='display:%s;' onclick='btnclick(this, " + gQuestionIndex + ");' />").replace('%s', $this.is(':visible') ? 'inline-block' : 'none')).attr('name', "value[" + gQuestionIndex + "][]").attr('value', $this.val()).attr('class', $this.attr('class')).attr('id', $this.attr('id') + 'Row');

更新:

以下是Answer表的SHOW CREATE TABLE:

CREATE TABLE `Answer` (
 `AnswerId` int(10) NOT NULL AUTO_INCREMENT,
 `QuestionId` int(10) NOT NULL,
 `Answer` varchar(10) DEFAULT NULL,
 PRIMARY KEY (`AnswerId`)
) ENGINE=InnoDB AUTO_INCREMENT=280 DEFAULT CHARSET=utf8

下面是一个var转储,如果我将问题1设置为有答案BC,并将问题2设置为根本没有答案,它将输出以下内容:

var_dump($question_ids);
    var_dump($results);
 array(2) { 
[1]=> int(247) 
[2]=> int(248) 
} 
array(1) { 
[1]=> array(2) { 
[0]=> string(1) "B" 
[1]=> string(1) "C" } 
} 

您可以从var_dumps中判断出您有两个问题,但只有一组答案。据我所见,你的设计缺陷并没有把问题的答案联系起来。

$results中没有第二个索引,意味着没有第二组答案,因此没有插入。。。

但如果你有三个问题,两个答案集,这些答案属于问题1&2或2&3或1&3.我不明白你是怎么把问题id和结果集联系起来的。