Permalänk
Medlem

SQL syntax error

Hej,

Jag har fått problem med ett fel i min php-kod.
När jag kör koden så får jag följande fel:

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 'UPDATE) VALUES ('1','1','1','1','1')' at line 1

<?php $con = mysql_connect("localhost","xxx","xxx"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db(xxx", $con); $sql="INSERT INTO 123 (CONTACT, LAYOUT, LOOK, INFORMATION, UPDATE) VALUES ('$_POST[contact]','$_POST[layout]','$_POST[look]','$_POST[information]','$_POST[update]')"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } echo "1 record added"; mysql_close($con) ?>

Tack på förhand

Mikael

Permalänk
Medlem

En vild gissning är att UPDATE är en reserverad ord i SQL. Testa att quota UPDATE med backticks (´UPDATE´).

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av F4n471c
En vild gissning är att UPDATE är en reserverad ord i SQL. Testa att quota UPDATE med backticks (´UPDATE´).

Stämmer bra det.

Kör med backticks så kommer det fungera.

En annan iakttagelse är att du inte sanerar datan från $_POST innan du använder den i din sql-query. Det är inte att rekommendera då det gör att din sql-query kan manipuleras. Googla på "SQL Injections" för mer info.

MVH/ Crazzir

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Permalänk
Medlem

Var ska jag lägga in dessa då? Ska jag bara ändra i koden, eller ska jag ändra överallt där det står UPDATE?

Mikael

Permalänk
Medlem

I din SQL-Query såhär:

$sql="INSERT INTO 123 (´CONTACT´,´LAYOUT´,´LOOK´,´INFORMATION´,´UPDATE´) VALUES ('$_POST[contact]','$_POST[layout]','$_POST[look]','$_POST[information]','$_POST[update]')";

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Permalänk
Medlem

vill du vara extra säker för att undvika namnproblem så gör du det med alla kolumnamn som Crazzir visar och inte bra på UPDATE

Visa signatur

Har varit på detta forum på tok för länge...

Permalänk
Medlem

Okej, nu är det gjort. Problemet är att jag fortfarande har samma fel, fast nu för alla posterna.
Jag antar att jag inte skulle ändra namnet i tabellen i databasen så att de heter just 'UPDATE'?

Mikael

Permalänk
Medlem

tabellnamnen i databasen skall du inte ändra. Det du skall ändra är hur din queryn ser ut i ditt php-script. De skall vara så som jag postade några posts innan.

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av crazzir
tabellnamnen i databasen skall du inte ändra. Det du skall ändra är hur din queryn ser ut i ditt php-script. De skall vara så som jag postade några posts innan.

Konstigt, fungerar fortfarande inte. Har samma fel som innan.

Permalänk
Testpilot
Citat:

Ursprungligen inskrivet av mgerner
Okej, nu är det gjort. Problemet är att jag fortfarande har samma fel, fast nu för alla posterna.
Jag antar att jag inte skulle ändra namnet i tabellen i databasen så att de heter just 'UPDATE'?

Mikael

Observera att du inte ska använda '-tecknet (det som sitter bredvid Ä) utan det är `-tecknet som gäller, det gör du genom att trycka skift+(tangenten bredvid backspace) och sen göra ett mellanslag.

Runt själva värdena som du ska spara är det dock '-tecknet som gäller så det är alltså två olika tecken du ska hålla koll på men som ser rätt lika ut. Kolla crazzirs post så ser du att det är två olika tecken han använder

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av hunden
Observera att du inte ska använda '-tecknet (det som sitter bredvid Ä) utan det är `-tecknet som gäller, det gör du genom att trycka skift+(tangenten bredvid backspace) och sen göra ett mellanslag.

Nu så!
Jag hade skrivit ´ istället för ` och det krånglade till det lite.
Stort tack för att ni tog er tid att hjälpa mig att lösa problemet! Bli inte förvånade om ni får se fler poster från en riktig php-nybörjare som jag...

Mikael

Permalänk
Medlem

Eller låt helt enkelt bli att använda reserverade ord. Hur svårt kan det vara.

Sedan använd ett eget påhittat prefix för dina tabell kolumn namn.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av BlueEyes
Eller låt helt enkelt bli att använda reserverade ord. Hur svårt kan det vara.

Sedan använd ett eget påhittat prefix för dina tabell kolumn namn.

Eller, ha alltid för vana att använda backticks kring tabell/kolumnamn för att inte behöva limiteras av de reserverade "ord" som finns.

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av crazzir
Eller, ha alltid för vana att använda backticks kring tabell/kolumnamn för att inte behöva limiteras av de reserverade "ord" som finns.

Du gjorde ett inlägg bara för att fortsätta traggla antar jag

Klart man kan använda backticksen

Dock vet du lika väl som jag att det är onödigt och dumt att använda dom reserverade orden.

Det hela handlar om en fråga om personlig smak och hur man vill programmera.

Limiteras ? du menar "Begränsas" som är det svenska ordet. om man har lite fantasi och använder prefix eller suffix så löser det sig. prova vet ja. det är inte så hemskt.

Men jag föredrar att inte använda reserverade orden av anledningen jag angav ovan.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av BlueEyes
Du gjorde ett inlägg bara för att fortsätta traggla antar jag

Klart man kan använda backticksen

Dock vet du lika väl som jag att det är onödigt och dumt att använda dom reserverade orden.

Det hela handlar om en fråga om personlig smak och hur man vill programmera.

Limiteras ? du menar "Begränsas" som är det svenska ordet. om man har lite fantasi och använder prefix eller suffix så löser det sig. prova vet ja. det är inte så hemskt.

Men jag föredrar att inte använda reserverade orden av anledningen jag angav ovan.

Självklart handlar det om vad man själv föredrar. Jag ser ingen nackdel i att kunna använda just de kolumnnamn man vill ha utan något prefix eller sufix men samtidigt är det ju rätt enkelt att använda ett prefix till alla kolumner. Sen är det visserligen lika enkelt att sätta kolumnnamnen inom backticks. Som vi båda sagt så är det helt enkelt upp till var och en.

"Begränsas" är kanske ett bättre ord om man vill locka en äldre publik, men "limitera" är lika korrekt. (Inte för att det är särskilt viktigt i sammanhanget)

http://www.svenskaakademien.se/web/Ordlista.aspx

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510