2017-03-02 4 views
0

Mein Testcode ist:Insert in SQL-Syntax-Fehler

<?php 
$connessione = mysql_connect("***", "***", "***"); 
mysql_select_db("***", $connessione); 

$risultato = mysql_query("SELECT * FROM servem_vote", $connessione); 

if(mysql_query("INSERT INTO servem_vote (uid,lastvote) VALUES ($uid,now()) ON DUPLICATE KEY UPDATE lastvote=now(); 

")) { 
    header('location:/home.php'); } 
else { 
    echo "Error: " . mysql_error(); } 
mysql_close($con); 
?> 

Error: 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 'now()) ON DUPLICATE KEY UPDATE lastvote=now()' at line 1

DB:

http://prntscr.com/ef7544

Wo mache ich falsch?

+2

Sie müssen aufhören, mysql_ * 'Funktionen zu verwenden. Sie sind seit Jahren veraltet und existieren nicht einmal in aktuellen PHP-Versionen. Bitte studieren Sie [PHP Data Objects] (http://php.net/manual/en/book.pdo.php), kurz PDO genannt, für einen moderneren Ansatz. – sidyll

+0

@sidyll Wo finde ich ein Beispiel? – Focusjob

+0

Mein Kommentar hat einen Link zum Handbuch mit allen Anweisungen und Beispielen. Wenn Sie das Handbuch nicht lesen möchten, gibt es viele andere Texte im Internet. Suchen Sie einfach nach PHP PDO :) – sidyll

Antwort

0

Sie vermissen $uid in dem Code, den Sie freigegeben haben. Sie legen diesen Wert nirgendwo fest, aber Sie versuchen, ihn als Teil Ihrer INSERT-Abfrage zu verwenden.

Wenn es von Formulardaten kommt es aus $_REQUEST superglobalen Variable greifen, bevor es zu benutzen:

$uid = $_REQUEST['uid']

Wenn es in der MySQL-Tabelle nicht eine ganze Zahl ist, können Sie es in einfachen Anführungszeichen wickeln müssen als Teil Ihrer Aussage.

INSERT INTO servem_vote (uid,lastvote) VALUES ('$uid',now()) 
ON DUPLICATE KEY UPDATE lastvote=now(); 

Ich weiß nicht, welchen Zweck diese Linie dient:

$risultato = mysql_query("SELECT * FROM servem_vote", $connessione);

Sie scheinen nicht von dieser Abfrage gesetzt nichts mit dem Ergebnis zu tun.

WICHTIGSTE: Wie viele andere Sie kommentiert haben, müssen Sie Ihre Daten bereinigen und Sie sollten sich auf PDO oder mysqli * -Funktionen verlassen, um sicher mit Ihrer Datenbank zu interagieren. See answers here

+0

Ich probierte einzelne Anführungszeichen '$ uid' - Fehler: Falscher ganzzahliger Wert: '' für Spalte 'uid' bei Zeile 1 – Focusjob

+0

So, '$ uid' Variable ist leer, wenn sie in der SQL-Abfrage benutzt wird. Woher erwarten Sie einen Wert für diese Variable? –

+0

Ich löste es durch Hinzufügen von: if ($ mybb-> Benutzer ['uid']> 0) { $ uid = $ mybb-> Benutzer ['uid']; \t $ usg = \t $ mybb-> Benutzer ['Benutzergruppe']; $ user = get_user ($ uid); $ name = $ user ['Benutzername']; } Wenn ich jetzt auch noch eine Abfrage UPDATE hinzufügen möchte, wie kann ich tun? UPDATE Serverm SET voto = voto + 1 WHERE id = '$ id' UND NICHT VORHANDEN (SELECT * FROM servem_vote WHERE uid = '$ uid' UND DATE_FORMAT (lastvote, '% m% d% Y') = DATE_FORMAT (JETZT(), '% m% d% Y')) – Focusjob