Задать вопрос
@Ablovka

Почему MySQL возвращает пустое значение?

Делаю регистрацию с дублированием данных в БД для игры Multi Theft Auto.
inputs[1] и inputs[2] - логин и пароль (только буквы и цифры)
После регистрации пользователя записывает в БД. В БД выставляются остальные значения по умолчанию.
Если запись в БД успешна, то скрипт снова обращается к БД и ищет данные игрока по нику и получает остальные данные, за тем спавнит пользователя, выдает ему деньги и т.п.

ПРОБЛЕМА:
local sNewUser = query("SELECT * FROM `userinfo` WHERE `nickname` = '"..tostring(inputs[1]).."'")

Данный запрос возвращает пустой стол

local sNewUser = query("SELECT * FROM `userinfo` WHERE `nickname` = 'test'")

Если делать такой запрос, то все возвращает.

Немного документации: https://wiki.multitheftauto.com/wiki/DbQuery
Скрин структуры БД: https://yapx.ru/v/ETIP1

Сам код:
local dbHost = 'localhost'
local dbName = 'test'
local dbUsername = 'root'
local dbPassword = ''

function query(...)
	local queryHandle = dbQuery(dbConnect('mysql','host='..dbHost..';dbname='..dbName, dbUsername, dbPassword), ...)
	if (not queryHandle) then
		return nil
	end
	local rows = dbPoll(queryHandle, -1)
	return rows
end

local nA = addAccount(inputs[1], inputs[2]) -- добавляем юзера в игру
		local addA = query("INSERT INTO `userinfo` ('serial', 'nickname', 'password', 'team') VALUES ('"..tostring(getPlayerSerial(client)).."', '"..tostring(inputs[1]).."', '"..tostring(inputs[2]).."')") -- добавляем игрока в базу
			if (nA and addA) then -- если удачно добавился
				local sNewUser = query("SELECT * FROM `userinfo` WHERE `nickname` = '"..tostring(inputs[1]).."'") -- ищем игрока в базе по имени							
				if (sNewUser) then
						for _, row in ipairs(sNewUser) do -- перебираем данные из базы
							posX = row['posX'] -- позиция X
							posY = row['posY'] -- позиция Y
							posZ = row['posZ'] -- позиция Z
							usrHealth = row['health'] -- здоровье
							w11 = row['w11'] -- 11 слот оружия
							usrTeam = row['team'] -- команда
							usrSkinID = row['skin'] -- скин
							usrMoney = row['money'] -- деньги
							usrArmor = row['armor'] -- броня
							outputDebugString('posX: '..posX)
							outputDebugString('posY: '..posY)
							outputDebugString('posZ: '..posZ)
							outputDebugString('usrHealth: '..usrHealth)
							outputDebugString('w11: '..w11)
							outputDebugString('usrTeam: '..usrTeam)
							outputDebugString('usrSkinID: '..usrSkinID)
							outputDebugString('usrMoney: '..usrMoney)
							outputDebugString('usrArmor: '..usrArmor)
						end	
					logIn(client, nA, inputs[2]) -- логиним юзера
					spawnPlayer(client, posX, posY, posZ, 0, usrSkinID, 0, 0) -- спавн (игрок, позиция x, y, z, положение, скин, интерьер, измерение)
					setPlayerMoney (client, usrMoney) -- выдаем деньги
					setTimer (setElementHealth, 50, 1, client, usrHealth) -- выдаем здоровье
					setTimer (setPedArmor, 50, 1, client, usrArmor) -- выдаем армор
					triggerClientEvent(client, "onClientSuccess", client) -- передаем юзеру, что все ок
					--setPlayerTeam(client, getTeamFromName("User"))
					--setAccountData(nA, "cash", 250000)
					--triggerClientEvent(client, "onClientSuccess", client)
				else
					triggerClientEvent(client, "showErrorMessage", client, "Ошибка")
				end
			else
				triggerClientEvent(client, "showErrorMessage", client, "Ошибка при создании аккаунта.")
			end
  • Вопрос задан
  • 221 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar Куратор тега Lua
Делай добро и бросай его в воду.
print("Login: " .. tostring(inputs[1]))
В общем, в ключевых местах расставьте print, - сразу увидите, что происходит.
Также попробуйте на всякий случай: print(#tostring(inputs[1])), а то вдруг пробел в конце прицепился или ещё что.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы