Jump to content

Проблема с SQL (mysql_num_rows)


Recommended Posts

При авторизации/регистрации игрока все проходит нормально. Но если сервер работает некоторое время, то при авторизации/регистрации, а именно после SQL запроса выскакивает ошибка:

[2016-01-13 12:21:31] ERROR: myserver\script.lua:39: bad argument #1 to 'mysql_num_rows' (mysqlResult expected, got nil) 

uAkz8Wo.png

На скрине до красной линии все авторизации успешны, а после красной линии(спустя ~5 минут работы сервера) ошибка

Авторизация:

local query = "SELECT * FROM accounts WHERE Login = '"..username.."' AND Password = '"..password.."'" 
    local result = mysql_query(sqlLink, query) 
    if(mysql_num_rows(result) > 0) then 
        ... 
    else 
        outputChatBox("Неправильный логин и/или пароль или аккаунт не зарегистрирован. Если Вы забыли пароль, обратитесь к администратору", client) 
    end 
    mysql_free_result(result) 

Регистрация:

local query = "SELECT * FROM accounts WHERE Login = '"..username.."'" 
    local result = mysql_query(sqlLink, query) 
    if(mysql_num_rows(result) > 0) then 
        outputChatBox("Указаный логин уже используется.", client) 
    else 
        local regsuc = mysql_query(sqlLink, "INSERT INTO accounts (Login, Password) VALUES ('"..username.."', '"..password.."')") 
        if regsuc then 
            ... 
        else 
            outputChatBox("Сбой SQL запроса. Попробуйте еще раз!", client) 
        end 
    end 
    mysql_free_result(result) 

Link to comment

Пожалуйста, оформляйте код в теге Lua.

В каком именно месте происходит ошибка? Я не вижу ошибок. Выложите весь код, желательно на gist.github.com

Link to comment
Пожалуйста, оформляйте код в теге Lua.

В каком именно месте происходит ошибка? Я не вижу ошибок. Выложите весь код, желательно на gist.github.com

https://gist.github.com/anonymous/60ea3a8863dca8474837

Проблема: Первый игрок свободно проходит авторизацию. Второй игрок иногда не может авторизоватся, при отправке SQL запроса сервер пишет:

bad argument #1 to 'mysql_num_rows' (mysqlResult expected, got nil)

Сколько бы второй игрок не пытался войти, пишет эту ошибку.

Так же, если сервер работает какое-то время (3-5+ минут), никто из игроков не может войти, даже если до этого никто не заходил, та же ошибка.

Как будто сервер думает, что 1 игрок зашел, других можно не пускать :cry:

Запустил сервер, спустя >5 минут захожу и сервер не пускает:

[2016-01-13 19:40:07] MODULE: Loaded "MySQL 5.0 database module" (0.50) by "Alberto Alonso "

[2016-01-13 19:40:07] Starting resources...

[2016-01-13 19:40:07] INFO: Connecting to a database MySQL successfully

[2016-01-13 19:40:09] Querying MTA master server... success! (Auto detected IP:178.215.185.119)

[2016-01-13 19:40:09] Server started and is ready to accept connections!

[2016-01-13 19:40:09] To stop the server, type 'shutdown' or press Ctrl-C

[2016-01-13 19:40:09] Type 'help' for a list of commands.

[2016-01-13 19:48:02] Server minclientversion is now 1.5.1-9.07677

[2016-01-13 19:48:02] CONNECT: developer connected (IP: 178.215.185.119 Serial: 345E7C01D18D2C5607365C7E5A5E77A2 Version: 1.5.1-9.07740.0)

[2016-01-13 19:48:02] JOIN: developer joined the game (IP: 178.215.185.119)

[2016-01-13 19:48:14] ERROR: myserver\script.lua:30: bad argument #1 to 'mysql_num_rows' (mysqlResult expected, got nil)

[2016-01-13 19:48:14] ERROR: myserver\script.lua:30: bad argument #1 to 'mysql_num_rows' (mysqlResult expected, got nil)

[2016-01-13 19:48:14] ERROR: myserver\script.lua:30: bad argument #1 to 'mysql_num_rows' (mysqlResult expected, got nil)

Link to comment
Попробуй проверь что возвращает сам handler перед запросом. Есть вероятность что соединение с базой пропадает.

Действительно. mysql_ping показал, что перед запросом соединения с базой данных нет.

Спасибо за помощь :)

Link to comment
  • Other Languages Moderators

Я крайне не рекомендую использовать mysql модули из-за того, что они не обновляются уже несколько лет. Кто знает, какие там дыры.

Link to comment
Я крайне не рекомендую использовать mysql модули из-за того, что они не обновляются уже несколько лет. Кто знает, какие там дыры.

Приму во внимание. Альтернатива есть?

UPD: Нашел что то.

Стоит ли использовать втроенные функции dbConnect, dbQuery и т.д. вместо модуля? И не возникнет ли проблема с потерей соединения с БД, как с модулем?

Link to comment
  • Other Languages Moderators

Стоит ли использовать втроенные функции dbConnect, dbQuery и т.д. вместо модуля? И не возникнет ли проблема с потерей соединения с БД, как с модулем?

Про соединение сам посмотри, а использовать стоит.

Link to comment
Я крайне не рекомендую использовать mysql модули из-за того, что они не обновляются уже несколько лет. Кто знает, какие там дыры.

Приму во внимание. Альтернатива есть?

UPD: Нашел что то.

Стоит ли использовать втроенные функции dbConnect, dbQuery и т.д. вместо модуля? И не возникнет ли проблема с потерей соединения с БД, как с модулем?

Ну так посмотрите внимательнее dbConnect на wiki.

autoreconnect which can be set to 0 or 1. (Default value "autoreconnect=1"). When set to 1, dropped connections will automatically be reconnected. Note that session variables, user variables, table locks and temporary tables will be reset because of the reconnection. So if you use these fancy features, you will need to turn autoreconnect off and cope with dropped connections some other way. 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...