Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z zapytaniem int = int +1
GyniO
post
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.

  1. Begin
  2. DECLARE pole TEXT;
  3. SET pole = 'visit';
  4. SET @s = CONCAT("UPDATE cms_users_stats SET ", pole," = (",pole," + 1) WHERE user_id = 1;");
  5. PREPARE stmt FROM @s;
  6. EXECUTE stmt;
  7. DEALLOCATE PREPARE stmt;
  8. END;


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
Go to the top of the page
+Quote Post
adk11
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 12:27