Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±

    Проблема с MySql

    1. func SaveCodex() {
    2. query = "";
    3. for(new i; i < CODEX_MAX; i++) {
    4. strcat(query, "UPDATE `Codex` SET ");
    5. format(string256, 150, "`Name` = '%s', ", Codex[i][codexName]);
    6. strcat(query, string256);
    7. format(string256, 150, "`Stars` = '%d' ", Codex[i][codexStars]);
    8. strcat(query, string256);
    9.  
    10. format(string256, 128, "WHERE `id` = '%d'", i);
    11. strcat(query, string256);
    12. mysql_query(dbHandle, query, false);
    13. }
    14. return 1;
    15. }



    Пробовал посмотреть такую инфу по инету, решения так и не нашел

    Проблема заключается вот в чем. При вызове функции запросы начинают накладываться друг на друга, и в итоге в MySql я получаю следующее:

    1. [13:32:43 05/24/20] [ERROR] CMySQLQuery::Execute - (error #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 'UPDATE `Codex` SET `Name` = 'Вторая статья', `Stars` = '0' WHERE `id' at line 1 (Query: "UPDATE `Codex` SET `Name` = '11', `Stars` = '0' WHERE `id` = '0'UPDATE `Codex` SET `Name` = 'Вторая статья', `Stars` = '0' WHERE `id` = '1'UPDATE `Codex` SET `Name` = 'Третья статья', `Stars` = '0' WHERE `id` = '2'UPDATE `Codex` SET `Name` = 'Четвертая статья', `Stars` = '0' WHERE `id` = '3'UPDATE `Codex` SET `Name` = 'Пятая статья', `Stars` = '0' WHERE `id` = '4'UPDATE `Codex` SET `Name` = 'Шестая статья', `Stars` = '0' WHERE `id` = '5'UPDATE `Codex` SET `Name` = 'Седьмая статья', `Stars` = '0' WHERE `id`")
    2. [13:32:43 05/24/20] [DEBUG] mysql_query - connection: 1, query: "UPDATE `Codex` SET `Name` = '11', `Stars` = '0' WHERE `id` = '0'", use_cache: false



    Пробовал вбивать в phpmyadmin запросы отдельно - все ок, проблем с синтаксисом нет.

  2. #2
    Аватар для geneff
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.07.2017
    Сообщений
    44
    Репутация:
    5 ±
    Кажется мне, что надо сделать вот-так вот:
    PHP код:
    func SaveCodex() {
        for(new 
    iCODEX_MAXi++) {
            
    query "";
            
    strcat(query"UPDATE `Codex` SET ");
            
    format(string256150"`Name` = '%s', "Codex[i][codexName]);
            
    strcat(querystring256);
            
    format(string256150"`Stars` = '%d' "Codex[i][codexStars]);
            
    strcat(querystring256);
     
            
    format(string256128"WHERE `id` = '%d'"i);
            
    strcat(querystring256);
            
    mysql_query(dbHandlequeryfalse);
        }
        return 
    1;


  3. Пользователь сказал cпасибо:
    MassonNN (24.05.2020)
  4. #3
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    как я забыл хм? ладно, спасибо)

  5. #4
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Зачем эти все извращения, если всё можно сделать одним форматированием?)
    1. format(query, sizeof query, "UPDATE Codex SET Name='%q', Stars=%d WHERE id=%d",
    2. Codex[i][codexName], Codex[i][codexStars], i);

  6. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    ^^^^
    ... не говоря уже о том, что, по-хорошему, для запросов следует использовать mysql_format(). Иначе, если название в Codex[i][codexName] было введено пользователем, то можно словить SQL-инъекцию.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. #6
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    Цитата Сообщение от execution Посмотреть сообщение
    Зачем эти все извращения, если всё можно сделать одним форматированием?)
    1. format(query, sizeof query, "UPDATE Codex SET Name='%q', Stars=%d WHERE id=%d",
    2. Codex[i][codexName], Codex[i][codexStars], i);
    Для логического ветвления, которое не представлено в этом коде, а может и нахрена оно мне))) подумаю еще

    - - - Добавлено - - -

    Ну у меня форматируется в самом вводе, если ты про символы, ибо они же будут отображаться хреново также и в диалогах и т.д., поэтому там я и проверяю на запретные символы, или это не cойдет?
    Последний раз редактировалось MassonNN; 26.05.2020 в 15:42.

  8. #7
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Поддерживаю пользователей выше. К чему вызывать strcat если используется format?

  9. #8
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
    Для логического ветвления, которое не представлено в этом коде
    В следующий раз, пожалуйста, не стесняйтесь уточнять такие подробности сразу в 1-м посте, чтобы у других людей не было к вам лишних вопросов.

    И да, я так понимаю, проблема решена?
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. #9
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В следующий раз, пожалуйста, не стесняйтесь уточнять такие подробности сразу в 1-м посте, чтобы у других людей не было к вам лишних вопросов.

    И да, я так понимаю, проблема решена?
    да.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •