【发布时间】:2026-02-22 22:35:01
【问题描述】:
当我尝试在一个查询中插入多行时,出现此错误:
SQLSTATE[42000]:语法错误或访问冲突:1172 结果 由多行组成
这是我使用的代码:
public function submitAnswers($q)
{
try
{
$sql = 'INSERT INTO `result_answers` (`resultID`, `questionID`, `answerID`, `isTrue`,`textAnswer`) VALUES ';
foreach($q as $question => $answer){
if($answer[0] == 0){
for($i = 1;$i < count($answer);$i++){
$sql .= '((select max(id) from result r where r.studentID = :studentID), ' . $question . ', ' . $answer[$i] .', NULL, NULL),';}
}elseif($answer[0] == 1){
$sql .= '((select max(id) from result r where r.studentID = :studentID), ' . $question . ', NULL, ' . $answer[1] .', NULL),';
}elseif($answer[0] == 2){
$sql .= '((select max(id) from result r where r.studentID = :studentID), ' . $question . ', NULL, NULL, "' . $answer[1] .'"),';
}
}
$query = rtrim($sql,',');
$stmt = $this->connect()->prepare($query);
$stmt->bindparam(":studentID",$_SESSION['student']->id);
$stmt->execute();
return true;
}
catch(PDOException $e)
{
echo $e->getMessage();
return false;
}
}
当我直接在我的数据库中执行$query 输出时,行已成功插入,所以我认为出于某种原因 PDO 不允许插入多行。
【问题讨论】:
-
这是一个 SQL 错误,而不是 PDO。这些值在
select列表中。像select max(id), $question . ', ' . $answer[$i] .', NULL, NULL from result r where r.studentID = :studentID这样的东西。你的$question和$answer[$i]也应该被绑定。 -
我在数据库上试过了,它可以工作,但是我如何用多行实现它我使用联合但我认为这不是性能的好选择@user3783243