![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 3 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, posiadam pewną funkcję, której zadaniem jest dodawanie do pola +1 no i tutaj mam problem.
No i często jest tak, że zamiast + 1 dodaje 60, 8,5... Co może być problemem? Osobiście uważam, że coś jest nie tak z concat,prepare,execute.. Mógłby mi ktoś napisać, czy jest inny możliwy sposób użycia zmiennej jako nazwę danego pola? Lub jak to zrobić w inny sposób, byle z użyciem sql, jest mi to potrzebne do mojego cms'a. Ten post edytował GyniO 1.12.2010, 21:18:09 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 2.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
CREATE TABLE `cms_users_stats` (
`user_id` int(11) NOT NULL AUTO_INCREMENT, `visit` int(11) DEFAULT '0', `login` int(11) DEFAULT '0', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE PROCEDURE `new_proc`( IN pole TEXT ) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN SET @s = CONCAT("UPDATE cms_users_stats SET ", pole," := (",pole," + 1) WHERE user_id = 1;"); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; END; mysql> select * from cms_users_stats; +---------+-------+-------+ | user_id | visit | login | +---------+-------+-------+ | 1 | 0 | 0 | +---------+-------+-------+ 1 row in set (0.00 sec) mysql> call new_proc('visit'); Query OK, 0 rows affected (0.01 sec) mysql> call new_proc('visit'); Query OK, 0 rows affected (0.00 sec) mysql> select * from cms_users_stats; +---------+-------+-------+ | user_id | visit | login | +---------+-------+-------+ | 1 | 2 | 0 | +---------+-------+-------+ 1 row in set (0.00 sec) mysql> call new_proc('login'); Query OK, 0 rows affected (0.01 sec) mysql> select * from cms_users_stats; +---------+-------+-------+ | user_id | visit | login | +---------+-------+-------+ | 1 | 2 | 1 | +---------+-------+-------+ 1 row in set (0.00 sec) mysql> call new_proc('login'); Query OK, 0 rows affected (0.00 sec) mysql> call new_proc('login'); Query OK, 0 rows affected (0.00 sec) mysql> call new_proc('login'); Query OK, 0 rows affected (0.00 sec) mysql> select * from cms_users_stats; +---------+-------+-------+ | user_id | visit | login | +---------+-------+-------+ | 1 | 2 | 4 | +---------+-------+-------+ 1 row in set (0.00 sec) mysql> call new_proc('loginn'); ERROR 1054 (42S22): Unknown column 'loginn' in 'field list' po ostatnim zapytaniu widać że kolumny są wpisywane z palca. Nie zauważyłem żeby też przy okazji istniejące kolumny były źle incrementowane. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 12:27 |