2017-01-12 2 views
-2

ich den Fehler:PHP PDO: SQLSTATE [HY093]: Ungültige Parameternummer: named gemischt und Positionsparameter

SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters

wenn ich versuche, den folgenden Code auszuführen:

 public function getScore($matchID,$setone,$settwo,$getChallengerScore,$getOpponentScore,$fileOpponentData,$fileChallengerData) 
{ 
    try 
    { 
     $stmt = $this->db->prepare("UPDATE matches SET `winner` = $setone 
             AND `looser` = $settwo 
             AND `winner_score` = $getChallengerScore 
             AND `looser_score` = $getOpponentScore 
             AND `opponent_blob` = '".$fileOpponentData."' 
             AND `challenger_blob` = '".$fileChallengerData."' 
            WHERE `id` = $matchID"); 
     #var_dump($stmt); 
     $stmt->execute(); 

     return $stmt; 
    } 
    catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    }  
} 

I‘ m nicht großartig mit PDO, hatte nicht viele Probleme, aber das kann ich nicht alleine lösen. Jede Hilfe würde sehr geschätzt werden.

+0

Ersetzen Sie keine Variablen, verwenden Sie eine parametrisierte Abfrage. – Barmar

+0

Ich frage mich auch, warum Sie manchmal variable Interpolation und andere Zeiten verwenden Verkettung, in der gleichen Zeichenfolge. – Barmar

+0

___SO ist nicht hier, um einen einfachen Blick auf das Handbuch zu ersetzen___ Sehen Sie sich die Syntax für ein UPDATE an. Es ist im Handbuch http://dev.mysql.com/doc/refman/5.7/en/update.html _HINT: _ 'AND' ???? – RiggsFolly

Antwort

0

Verwenden Sie eine ordnungsgemäß parametrisierte Abfrage. Und die Zuordnungen in einer UPDATE Anweisung müssen durch ,, nicht AND getrennt werden.

$stmt = $this->db->prepare("UPDATE matches SET `winner` = :setone 
          , `looser` = :settwo 
          , `winner_score` = :getChallengerScore 
          , `looser_score` = :getOpponentScore 
          , `opponent_blob` = :fileOpponentData 
          , `challenger_blob` = :fileChallengerData 
          WHERE `id` = :matchID"); 
$stmt->execute(array(
    ':setone' => $setone, 
    ':settwo' => $settwo, 
    ':getChallengerScore' => $getChallengerScore, 
    ':getOpponentScore' => $getOpponentScore, 
    ':fileOpponentData' => $fileOpponentData, 
    ':fileChallengerData' => $fileChallengerData, 
    ':matchID' => $matchID 
)); 
+0

Danke, das war die genaue Lösung. – Xamber

Verwandte Themen