maar het aantal user_stars en user_geld wordt gewoon op 0 gezet.
Tja, jij kiest voor MySQL, moet je niet zeuren dat er dingen fout gaan. Dat is een logisch gevolg.
Oorzaak: De subquery zet jij als een string in je query. Wanneer je een string in een veld van het type INT (of een broertje daarvan) probeert te stoppen, zal MySQL (by default) jouw resultaten keurig naar de klote helpen.
Ik heb het al vaker gezegd, ben de tel inmiddels kwijt, maar MySQL is ***beeeeeep***. Een normale database geeft een foutmelding! En dat is wat je hebben wilt als je iets fout doet. Niet dat jouw data naar de bliksem wordt geholpen.
Kortom, schiet MySQL af, help hem naar de eeuwige jachtvelden en ga bv. met PostgreSQL aan de slag.
Al zul je ook dan jouw query moeten aanpassen, je krijgt dan een foutmelding op jouw huidige query... Kortom, zet geen quotes om een subquery.
Wat de TS wil kan prima met MySQL, alleen moet hij meer controleren op de invoer. Aanpassen van de query is voldoende in principe.
Weet ik, maar dat je geen foutmeldingen krijg en dat je data naar de bliksem wordt geholpen, dat is wel typisch MySQL. Dat is tegen alle regels, wetten en ongeschreven wetten van een DBMS in!
Vandaar dat ik deze kans niet laat liggen en MySQL nog even een schop na geef.
En het mooiste is nog dat ook jij weet dat dit topic wordt veroozaakt door een brakke "database" en niet door de brakke SQL van de gebruiker. Hij had namelijk gewoon een foutmelding moeten krijgen.
Klopt, en op dat punt ben ik het ook met je eens. Ik ken de nukken van MySQL zo ondertussen wel.. als m'n host naar pgSQL overstapt of deze aanbied maak ik daar ook meteen gebruik van.
Maar het gaat er in dit topic dus om dat die query voor geen meter klopt. (Zal wel weer een gedownloade crimi zijn :( )
@TS
had er nog meer achteraan moeten komen, in het stukje code dat jij post wordt helemaal geen update gedaan!
Tja, het blijft een beroerd verhaal, maar volgens mij klopt deze syntax en wordt er beveiligd:
<?
$query = "
UPDATE
phpbb_users
SET
user_geld = (
(SELECT user_geld FROM phpbb_users WHERE user_id = " . mysql_real_escape_string($_GET['user_id']).")
+
(" . mysql_real_escape_string($_POST['user_stars']). " * 1000000)
),
user_stars = (
(SELECT user_stars FROM phpbb_users WHERE user_id = " . mysql_real_escape_string($_GET['user_id']) . ")
+
" . mysql_real_escape_string($_POST['user_stars']) . "),
user_warnings = '" . mysql_real_escape_string($_POST['user_warnings']) . "'
WHERE
user_id = " . mysql_real_escape_string($_GET['user_id']);
mysql_query($query) or die (mysql_error(). ' met query: '.$query);
?>
Tip: Ga eens met PostgreSQL aan de slag, je bent er nu al achter dat data in MySQL niet kan worden vertrouwd. De database verknalt zomaar jouw data.
You can't specify target table 'phpbb_users' for update in FROM clause
met query:
UPDATE phpbb_users SET user_geld = ( (SELECT user_geld FROM phpbb_users WHERE user_id = 2) + (2 * 1000000) ),
user_stars = ( (SELECT user_stars FROM phpbb_users WHERE user_id = 2) + 2),
user_warnings = '5' WHERE user_id = 2
P.S.
is dit niet mogelijk?
mysql_query("UPDATE user_stars = user_stars + " . $_POST['user_stars'] . " FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ") or die (mysql_error());
mysql_query("UPDATE user_geld = user_geld + (" . $_POST['user_stars'] . " * 1000000) FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ") or die (mysql_error());
mysql_query("UPDATE user_warnings = " . $_POST['user_warnings'] . " FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ") or die (mysql_error());