Проверка наличия PRIMARY KEY
|
|
Regedit
|
Дата: Среда, 09.09.2015, 15:13:01 | Сообщение # 1 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Мне нужно проверить есть ли в таблице уникальный Steam_ID ? Как это сделать? Просто если он есть но мне нужно будет по нему делать UPDATE к его значениям, а если нет то INSERT...
Очень надеюсь что я обьяснил понятно)))
|
|
| |
Scarface_slv
|
Дата: Среда, 09.09.2015, 15:36:00 | Сообщение # 2 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
ну с SELECT пробуешь получить знач стима. В блоке уже проверяешь результат if (!SQL_FetchRow(result)) значит нет стима. INSERT else есть стим UPDATE
Сообщение отредактировал Scarface_slv - Среда, 09.09.2015, 16:18:22 |
|
| |
Tokami
|
Дата: Среда, 09.09.2015, 16:49:01 | Сообщение # 3 |
|
Сообщений: 238
Репутация: 19 [ +/- ]
|
|
Scarface_slv, в его случае, ему это не поможет помойму
|
|
| |
Regedit
|
Дата: Среда, 09.09.2015, 18:16:47 | Сообщение # 4 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Цитата Scarface_slv ( ) ну с SELECT пробуешь получить знач стима. В блоке уже проверяешь результат if (!SQL_FetchRow(result)) значит нет стима. INSERT else есть стим UPDATE
Тогда обясни мне такого рода выражение в блоке SELECT
Код if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) { }
|
|
| |
Tokami
|
Дата: Среда, 09.09.2015, 18:48:01 | Сообщение # 5 |
|
Сообщений: 238
Репутация: 19 [ +/- ]
|
|
Regedit, да, мне сказали должно работать, пробуй
|
|
| |
Regedit
|
Дата: Среда, 09.09.2015, 19:28:09 | Сообщение # 6 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Цитата Tokami ( ) Regedit, да, мне сказали должно работать, пробуй
Что пробовать ?
if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) { }
это ? или
if (!SQL_FetchRow(hndl))
|
|
| |
_R1KO_
|
Дата: Среда, 09.09.2015, 19:39:29 | Сообщение # 7 |
|
Сообщений: 200
Репутация: 30 [ +/- ]
|
|
Что вы несете? Если я верно понял и нужно проверить что если игрок есть базе то обновить его данные, если нет - добавить то пост 2 от Scarface_slv решает все его проблемы. Конечно можно по*бать себе мозг и сделать это одним запросом но зачем?
|
|
| |
Regedit
|
Дата: Среда, 09.09.2015, 20:14:54 | Сообщение # 8 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Код String:GetMySQL_Query(String:table[], String:key[], String:key_value[], String:arg[512]) { return ")(yй" }
SetMySQL_Query(String:table[], String:key[], String:key_value[], String:arg[400], String:arg_value[]) { GetMySQL_Query(table, key, key_value, arg); }
Компилятор жалуется на GetMySQL_Query(table, key, key_value, arg); (SGJM/functions/MySQL.sp(73) : error 047: array sizes do not match, or destination array is too small)
Почему? передаваемые данные даже меньше чем принимает GetMySQL_Query...
String:arg[512] сделать меньше не могу т.к мне нужно записать эту строку в глобальную переменную для дальнейших действий..
2) Как передать в public SQL_SelectPlayerCallback(Handle:owner, Handle:hndl, const String:error[], any:data) строку temp_info_for_bd чтоб сделать SQL_FieldNameToNum(hndl, temp_info_for_bd, n);
Не ругайтесь впервые работаю с sql!
Сообщение отредактировал Regedit - Среда, 09.09.2015, 20:19:09 |
|
| |
_R1KO_
|
Дата: Среда, 09.09.2015, 20:18:36 | Сообщение # 9 |
|
Сообщений: 200
Репутация: 30 [ +/- ]
|
|
Потому что во-первых это строка, а строки не нужно как инт возвращать: Тебе нужно форматировать входящую строку key_value или что там у тебя. Во-вторых ты задаешь размер String:arg[512], а приходит у тебя неизвестно что.
|
|
| |
Regedit
|
Дата: Среда, 09.09.2015, 20:27:57 | Сообщение # 10 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Цитата _R1KO_ ( ) Потому что во-первых это строка, а строки не нужно как инт возвращать: Код return ")(yй"
Тебе нужно форматировать входящую строку key_value или что там у тебя. Во-вторых ты задаешь размер String:arg[512], а приходит у тебя неизвестно что.
блин точно.. форматом сбить размер строки (если я правильно понял) ))
и на 2 вопрос еще бы..)Добавлено (09.09.2015, 20:25:07) --------------------------------------------- Крч ппц какй-то Добавлено (09.09.2015, 20:25:20) --------------------------------------------- в 3 соснах заблудился. Добавлено (09.09.2015, 20:27:57) --------------------------------------------- Ура скомпилил.
2) Как передать в public SQL_SelectPlayerCallback(Handle:owner, Handle:hndl, const String:error[], any:data) строку temp_info_for_bd чтоб сделать SQL_FieldNameToNum(hndl, temp_info_for_bd, n);
|
|
| |
_R1KO_
|
Дата: Среда, 09.09.2015, 20:33:21 | Сообщение # 11 |
|
Сообщений: 200
Репутация: 30 [ +/- ]
|
|
Regedit, в SQL_TQuery есть параметр data. Через него можешь datapack передать
|
|
| |
Regedit
|
Дата: Среда, 09.09.2015, 20:49:09 | Сообщение # 12 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Цитата _R1KO_ ( ) Regedit, в SQL_TQuery есть параметр data. Через него можешь datapack передать спс только что так и сделал =)
CREATE TABLE IF NOT EXISTS clients (key VARCHAR(35) PRIMARY KEY, name VARCHAR(125), ip_addres VARCHAR(32));
ошибка
#1064 - 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 'VARCHAR(35) PRIMARY KEY, name VARCHAR(125), ip_addres VARCHAR(32))' at line 1
Что тут не так еще!???
|
|
| |
Tokami
|
Дата: Четверг, 10.09.2015, 19:19:11 | Сообщение # 13 |
|
Сообщений: 238
Репутация: 19 [ +/- ]
|
|
Regedit, имя key в MySQL нельзя использовать!
|
|
| |
_R1KO_
|
Дата: Четверг, 10.09.2015, 19:25:43 | Сообщение # 14 |
|
Сообщений: 200
Репутация: 30 [ +/- ]
|
|
Tokami, я использовал и норм
|
|
| |
Tokami
|
Дата: Пятница, 11.09.2015, 16:24:30 | Сообщение # 15 |
|
Сообщений: 238
Репутация: 19 [ +/- ]
|
|
_R1KO_, в sqlite может да, в mysql не верю попробуй прямо щас открыть phpmyadmin и создать табличку с ячейкой key
|
|
| |