een variabele optellen bij het huidige aantal in database
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
UPDATE phpbb_users
SET
user_geld= '((SELECT user_geld FROM phpbb_users WHERE user_id = " . $_GET['user_id'] .")+(" . $_POST['user_stars'] . " * 1000000))',
user_stars = '((SELECT user_stars FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ")+ " . $_POST['user_stars'] . ")',
user_warnings = '" . $_POST['user_warnings'] . "'
WHERE
user_id = " . $_GET['user_id']) or die (mysql_error());
SET
user_geld= '((SELECT user_geld FROM phpbb_users WHERE user_id = " . $_GET['user_id'] .")+(" . $_POST['user_stars'] . " * 1000000))',
user_stars = '((SELECT user_stars FROM phpbb_users WHERE user_id = " . $_GET['user_id'] . ")+ " . $_POST['user_stars'] . ")',
user_warnings = '" . $_POST['user_warnings'] . "'
WHERE
user_id = " . $_GET['user_id']) or die (mysql_error());
ik heb deze code maar het wil niet echt werken, ik krijg geen foutmelding, maar het aantal user_stars en user_geld wordt gewoon op 0 gezet.
de fout zit nergens anders, maar hier
clown schreef op 18.02.2008 11:14:
Tja, jij kiest voor MySQL, moet je niet zeuren dat er dingen fout gaan. Dat is een logisch gevolg.maar het aantal user_stars en user_geld wordt gewoon op 0 gezet.
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.
Ps. De hele query lijkt nergens op...
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Wat de TS wil kan prima met MySQL, alleen moet hij meer controleren op de invoer. Aanpassen van de query is voldoende in principe.
Robert_Deiman schreef op 18.02.2008 12:35:
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!@pgFrank
Wat de TS wil kan prima met MySQL, alleen moet hij meer controleren op de invoer. Aanpassen van de query is voldoende in principe.
Wat de TS wil kan prima met MySQL, alleen moet hij meer controleren op de invoer. Aanpassen van de query is voldoende in principe.
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.
;)
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!
Ruikt naar het 100.000ste criminals script verder... kan aan mijn neus liggen...
ik gebruik in mijn database idd INT's voor stars, warnings en geld
hoe zou de code wel goed zijn :P?
Gewijzigd op 01/01/1970 01:00:00 door clown
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$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);
?>
$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.
Code (php)
1
2
3
4
5
2
3
4
5
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
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?
Code (php)
1
2
3
4
5
2
3
4
5
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());
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());
Gewijzigd op 01/01/1970 01:00:00 door clown
MySQL zuigt!!!