我正在尝试将数据插入数据库,但我在bind_param()中收到此错误:
Fatal error: Only variables can be passed by reference in ... on line 48
我一直在网上搜索,但我不太明白这个错误意味着什么,因为我已经完成了这个插入,这是我第一次收到这个错误。
导致此错误的问题是什么?
下面是插入代码:
$answersql = "INSERT INTO Penalty_Marks (PenaltyAnswer, PenaltyMarks, QuestionId)
VALUES (?, ?, ?)";
if (!$insertanswer = $mysqli->prepare($answersql)) {
// Handle errors with prepare operation here
}
$c = count($_POST['incorrect']);
for($i = 0; $i < $c; $i++ )
{
$insertanswer->bind_param('iii', $_POST['incorrect'][$i], $_POST['answerMarks'][$i], $_POST['numQuestion'][$i]);
下面是检索详细信息的表单(下面的表单已经删除,以便于查看):
<form id="PenaltyMarks" action="insertpenaltymarks.php" method="post">
<table id='penaltytbl'>
<?php
foreach($ques_ans as $questionId => $inc_ans)
{
$q_row_span = count($inc_ans);
$row_count = 0;
$inc_ans = array_values($inc_ans);
?>
<tr class="questiontd">
<td>
<input type="hidden" name="numQuestion" value="<?php echo$questionId?>" />
</td>
<td>
<input type="hidden" class="hiddenincorrect" name="incorrect[]" value="<?php echo$inc_ans[$row_count];?>">
</td>
<td>
<input name="answerMarks[]" type="text" data-type="qmark" value='0' />
</td>
</tr>
<?php
//remaining incorrect answers in separate row (if any) follows here
if($row_count < $q_row_span - 1)
{
for($i=($row_count + 1); $i<$q_row_span; $i++) { ?>
<tr>
<td>
<input type="hidden" class="hiddenincorrect" name="incorrect[]" value="<?php echo$inc_ans[$i];?>">
</td>
<td class="answermarkstd">
<input name="answerMarks[]" type="text" data-type="qmark" value='0' />
</td>
</tr>
<?php
}
}
}
?>
</table>
</form>
答案 0 :(得分:1)
问题是bindParam的参数实际上必须是变量,而不是字符串或数组。这段代码应该有效:
$incorrect = $_POST['incorrect'][$i];
$answerMarks = $_POST['answerMarks'][$i];
$numQuestion = $_POST['numQuestion'][$i];
$insertanswer->bind_param('iii', $incorrect, $answerMarks, $numQuestion);
答案 1 :(得分:-2)
Try this:
Declare variables x,y,z at appropriate locations.
$answersql = "INSERT INTO Penalty_Marks (PenaltyAnswer, PenaltyMarks, QuestionId)
VALUES (?, ?, ?)";
$x = $_POST['incorrect'][$i];
$y = $_POST['answerMarks'][$i];
$z = $_POST['numQuestion'][$i];
if (!$insertanswer = $mysqli->prepare($answersql)) {
// Handle errors with prepare operation here
}
$c = count($_POST['incorrect']);
for($i = 0; $i < $c; $i++ )
{
$insertanswer->bind_param('iii', x,y,z);
Hope that solves it.