MySQL update syntax error
Code (php)
1
2
3
2
3
<?php
mysql_query("UPDATE content SET ".$page." = '".$text."' WHERE id = '".$language."'")or die(mysql_error());
?>
mysql_query("UPDATE content SET ".$page." = '".$text."' WHERE id = '".$language."'")or die(mysql_error());
?>
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 '1 = '<p>test</p>' WHERE id = '3'' at line 1
Als ik de query echo krijg ik netjes dit te zien: UPDATE content SET 1 = '<p>test</p>' WHERE id = '3'
Hier lijkt niets mis mee te zijn, ik heb uit meerdere pagina's dit stuk gekopieerd en internet geraadpleegd maar het is allemaal hetzelfde. Ik snap er echt niets meer van, al die andere scripts werken prima, en deze niet. Ook heb ik alle variabelen veranderd in constanten, maar zelfs dan krijg ik die error. Ook heb ik geëxperimenteerd met spaties, haakjes, slashes, quotes, doublequotes, punten, komma's en wat nog meer, maar na een uurtje experimenteren was dat niet zo leuk meer.
Het moet gewoon iets kleins stoms zijn, Murphy heeft altijd gelijk, dus ik had gehoopt dat een ander paar ogen hier de fout kon inzien...
(ik heb trouwens op allerlei manieren error reporting gedaan, telkens hetzelfde)
is je kolomnaam 1??? kan me voorstellen dat daar het probleem in zit...
Nee, de kolom heet inderdaad 1. Afgezien van de eerste zijn ze allemaal genummerd.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?PHP
/* Query */
$Query =
"
UPDATE
content
SET
'".$page."' = '".$text."'
WHERE
id = '".$language."'
";
/* Result */
$Result = mysql_query($Query);
/* Kijken of er een result is */
if(!$Result)
{
/* Foutje in je query */
echo 'Er is een fout opgetreden in de query. Query: '.$Query.'';
}
else
{
/* Query succesvol uitgevoerd */
}
?>
/* Query */
$Query =
"
UPDATE
content
SET
'".$page."' = '".$text."'
WHERE
id = '".$language."'
";
/* Result */
$Result = mysql_query($Query);
/* Kijken of er een result is */
if(!$Result)
{
/* Foutje in je query */
echo 'Er is een fout opgetreden in de query. Query: '.$Query.'';
}
else
{
/* Query succesvol uitgevoerd */
}
?>
Hoe zien je variables eruit die je in je query gebruikt?
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
Maar je hebt jezelf nu wel geforceerd in het gebruiken van backticks, want er is geen andere manier om zulke vreemde kolomnamen anders te benoemen in MySQL.
Een oplossing zou zijn:
Code (php)
1
2
3
2
3
<?php
mysql_query("UPDATE content SET `".$page."` = '".$text."' WHERE id = '".$language."'")or die(mysql_error());
?>
mysql_query("UPDATE content SET `".$page."` = '".$text."' WHERE id = '".$language."'")or die(mysql_error());
?>
maar een veeeel betere oplossing zou zijn om kolomnamen te nemen die logischer zijn. Maar als ik je kolomnamen zo zie op dit moment is het zelfs nog beter om eens te zoeken op normaliseren. Pas dan kan je de kracht van een database echt goed gebruiken, en kan je later veel beter uitbouwen. En anders is het vast een goeie oefening voor later, want normaliseren moet ieder leren >:)
edit: let op het verschil tussen backticks en enkele quotes. Tabelnamen mogen omringt worden door backticks, strings moeten omringt worden door enkele quotes. Of zou mysql in staat zijn om op basis van de context te kunnen bepalen of iets een kolomnaam of een string is? En zo ja, waarom doet hij dat dan niet in eerste instantie al met die 1?
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Bedankt!
Martijn: doe hier wel echt wat aan! Die backticks zijn echt beroerd, en gaan je alleen maar problemen opleveren...
Met, heb je godmode, maar als je t een keer vergeet kan je wellicht je hele database om zeep helpen!
Dat kan je jaren data kosten wellicht en hoeveel dat waard is, is speculatie.
En dat wil je niet!
backticks laten je alles gebruiken als "reserved keyword" bijvoorbeeld.
je kan een kolom `drop` noemen, vergeet het 1 keer een er wordt een DROP querie uitgevoerd... Dat wil niemand.
Dus heb je in bijvoorbeeld mySql nooit []` nodig in welke query dan ook.\
En mag je dus ook nooit gebruiken!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
abstract class Lode_Sql_Mysql{
protected function filterSql($sql){
if(preg_match('[^\[\]`] ', $sql)){
throw new ErrorException('Malformed query!');
}
return $sql;
}
}
?>
abstract class Lode_Sql_Mysql{
protected function filterSql($sql){
if(preg_match('[^\[\]`] ', $sql)){
throw new ErrorException('Malformed query!');
}
return $sql;
}
}
?>
1 x keer vergeten is nooit meer weten in mySql...
Gewijzigd op 01/01/1970 01:00:00 door Lode
Een delete query zonder WHERE voorwaarde kan ook je database om zeep helpen, en die fout maak je sneller dan dat je door backticks te vergeten een drop table weet uit te voeren... Klinkt als een kut-argument dat pgFrank had kunnen geven, maar ik hoopte eigenlijk dat we daar nu eens vanaf waren.
Lol, Jelmer "Klinkt als een kut-argument dat pgFrank had kunnen geven, maar ik hoopte eigenlijk dat we daar nu eens vanaf waren." :)
Enige vervelende was z'n eindeloze reclame voor PostgreSql