@mmm,
Zmieniłem sobie na bindowanie subjectId, ale najwyraźniej w PDO nie można zabindować jednej rzeczy do dwóch miejsc: "number of bound variables does not match number of tokens"
Jest jakiś sposób na obejście tego?Dla potomnych:
Rozwiązanie z 2 różnymi query:
if($this->chartSubject != NULL && !in_array($this->chartSubject, $this->userSubjects)){// first query $queryHandleSelect = $this->pdoHandle->prepare('SELECT gradeValue,gradeWeight FROM grades WHERE subjectId=:subjectId AND userId=:userId AND gradeTrimester = :gradeTrimester');
//bind user id
$queryHandleSelect->bindParam(':userId', $this->userId);
//bind trimester
if($this->chartTrimester == NULL){
$queryHandleSelect->bindParam(':gradeTrimester', $this->currentTrimester); //
}
else{
$queryHandleSelect->bindParam(':gradeTrimester', $this->chartTrimester);
}
$queryHandleSelect->bindValue(':subjectId', $this->chartSubject);
}
else{//second query no subject choice
$queryHandleSelect = $this->pdoHandle->prepare('SELECT gradeValue,gradeWeight FROM grades WHERE userId=:userId AND gradeTrimester = :gradeTrimester');
//bind user id
$queryHandleSelect->bindParam(':userId', $this->userId);
//bind trimester
if($this->chartTrimester == NULL){
$queryHandleSelect->bindParam(':gradeTrimester', $this->currentTrimester); //
}
else{
$queryHandleSelect->bindParam(':gradeTrimester', $this->chartTrimester);
}
}
Rozwiązanie z 1 query:
$queryHandleSelect = $this->pdoHandle->prepare('SELECT gradeValue,gradeWeight FROM grades WHERE gradeTrimester=:gradeTrimester AND userId=:userId AND subjectId = CASE WHEN :subjectId="" THEN subjectId ELSE :subjectId2 END');
$queryHandleSelect->bindParam(':userId', $this->userId);
if($this->chartTrimester == NULL){
$queryHandleSelect->bindParam(':gradeTrimester', $this->currentTrimester); //
}
else{
$queryHandleSelect->bindParam(':gradeTrimester', $this->chartTrimester);
}
if($this->chartSubject != NULL && !in_array($this->chartSubject, $this->userSubjects)){ $queryHandleSelect->bindValue(':subjectId', $this->chartSubject);
$queryHandleSelect->bindValue(':subjectId2', $this->chartSubject);
}
else{
$queryHandleSelect->bindValue(':subjectId', '');
$queryHandleSelect->bindValue(':subjectId2', '');
}
$queryHandleSelect->execute();
$this->chartData = $queryHandleSelect->fetchAll(PDO::FETCH_ASSOC);