2017-05-08 1 views
-2

Ich bekomme diesen Fehler, der scheint, als sollte es leicht zu finden sein, aber egal wie sehr ich den Code anschaue, oder Google es, ich kann es nicht herausfinden.Sie haben einen Fehler in Ihrer SQL-Syntax. in der Nähe von 'SET'-Punkten` = `Punkte` +?'

Hier ist der Code

INSERT INTO `users` (`username`) 
    VALUES (?) 
     ON DUPLICATE KEY 
      UPDATE `users` SET `points` = `points` + ? 

Das? später angegebenen Werte vorbereitete Anweisungen verwenden, aber zum Testen ich ersetzte sie durch tatsächliche Werte wie unter

INSERT INTO `users` (`username`) 
    VALUES (`existingusername`) 
     ON DUPLICATE KEY 
      UPDATE `users` SET `points` = `points` + 5 

Und ich habe auch versucht, nonextistingusername als Wert. Und ich versuchte WHERE für UPDATE verwenden, aber glauben, ist es nicht notwendig, weil ich bin mit ON DUPLICATE KEY UPDATE

Ich sehe nicht, wohin ich gehe falsch hier

Edit: Ich auch Klammern versucht, um die "points + 5"

Edit: weiter Code

foreach ($users as $user) 
{ 
    $points_query = mysqli_prepare($db, 'INSERT INTO `users` (`username`) 
     VALUES (?) 
      ON DUPLICATE KEY 
       UPDATE `users` SET (`points` = `points` + ?)'); 

    mysqli_stmt_bind_param($points_query, 'si', $user, $user_points); 
    mysqli_stmt_execute($points_query); 

    echo mysqli_error($db) . "\n"; 
} 

Und der SQL-Fehler

You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL 
server version for the right syntax to 
use near 'SET (`points` = `points` + ?)' at line 4 
+0

Können Sie den PHP-Code und die Fehlermeldung auf die Frage hinzufügen? – chris85

+0

@ chris85 Ich habe es aktualisiert. danke – cantsay

Antwort

1

Die korrekte Syntax verwendet nicht erneut den Tabellennamen oder das Schlüsselwort SET.

ON DUPLICATE KEY 
    UPDATE `points` = `points` + ? 

https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

+0

danke. hatte das Gefühl, dass es mit der Verwendung von "ON DUPLICATE KEY" zusammenhängt und die Änderung in der Abfrage übersehen haben muss – cantsay

Verwandte Themen