Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak połączyć się z bazą danych z Unity?

Przy takim podejściu zignoruj ​​wszelkie zagrożenia bezpieczeństwa

Nie rób tego w ten sposób . Nie ma znaczenia, czy ochrona nadejdzie przed, czy po. Skończysz przepisywanie całego kodu, ponieważ hasło jest na stałe zakodowany w Twojej aplikacji, który można dekompilować i łatwo pobrać . Wykonaj połączenie teraz we właściwy sposób, aby nie trzeba było ponownie pisać całej aplikacji.

Uruchom polecenie bazy danych na swoim serwerze za pomocą php, perla lub dowolnego języka, w którym jesteś wygodny, ale powinno to zostać zrobione na serwerze.

W Unity użyj WWW lub UnityWebRequest klasy do komunikacji z tym skryptem, a następnie będziesz mógł wysyłać i odbierać informacje z Unity na serwer. Istnieje wiele przykładów. Nawet z tym nadal musisz wdrożyć własne zabezpieczenia, ale jest to znacznie lepsze niż to, co masz teraz.

Możesz także odbierać dane wielokrotne za pomocą json.

Poniżej znajduje się kompletny przykład z tej wiki Unity. Pokazuje, jak współdziałać z bazą danych w Unity za pomocą php po stronie serwera i Unity + C# po stronie klienta.

Po stronie serwera :

Dodaj wynik za pomocą PDO :

Wystąpił błąd.
', $e->getMessage() ,'
'; } $realHash =md5($_GET['nazwa'] . $_GET['wynik'] . $secretKey); if($realHash ==$hash) { $sth =$dbh->prepare('WSTAW WARTOŚCI punktów (null, :name, :score)'); spróbuj { $sth->wykonaj($_GET); } catch(Wyjątek $e) { echo '

Wystąpił błąd.

', $e->getMessage() ,'
'; } } ?>

Pobierz wynik za pomocą PDO :

Wystąpił błąd.
', $e->getMessage() ,'
'; } $sth =$dbh->query('WYBIERZ * Z wyników ORDER BY score OBNIŚĆ LIMIT 5'); $sth->setFetchMode(PDO::FETCH_ASSOC); $wynik =$sth->pobierzWszystko(); if(count($wynik)> 0) { foreach($wynik jako $r) { echo $r['nazwa'], "\t", $r['wynik'], "\n"; } }?>

Włącz zasady międzydomenowe na serwerze :

Plik ten powinien mieć nazwę „crossdomain.xml” i umieścić w katalogu głównym serwera WWW. Unity wymaga, aby witryny internetowe, do których chcesz uzyskać dostęp za pośrednictwem żądania WWW, miały politykę międzydomenową.

 

Strona klienta/jedności :

Kod klienta z Unity łączy się z serwerem, wchodzi w interakcję z PDO i dodaje lub pobiera wynik w zależności od tego, która funkcja jest wywoływana. Ten kod klienta został nieznacznie zmodyfikowany w celu skompilowania z najnowszą wersją Unity.

ciąg prywatny secretKey ="mySecretKey"; // Edytuj tę wartość i upewnij się, że jest taka sama jak ta przechowywana w łańcuchu serverpublic addScoreURL ="http://localhost/unity_test/addscore.php?"; //pamiętaj, aby dodać ? do twojego urlpublic string highscoreURL ="http://localhost/unity_test/display.php";//Tekst do wyświetlenia wyniku onpublic Tekst statusText;unieważnij Start(){ StartCoroutine(GetScores());}// pamiętaj, aby użyć StartCoroutine podczas wywoływania tej funkcji!IEnumerator PostScores(string name, int score){ //To łączy się ze skryptem php po stronie serwera, który doda nazwę i wynik do bazy danych MySQL. // Dodaj do niego ciąg reprezentujący imię gracza i jego wynik. skrót ciągu =Md5Sum(nazwa + wynik + tajny klucz); string post_url =addScoreURL + "name=" + WWW.EscapeURL(name) + "&score=" + wynik + "&hash=" + hash; // Opublikuj adres URL na stronie i utwórz obiekt do pobrania, aby uzyskać wynik. WWW hs_post =nowy WWW(post_url); plon zwraca hs_post; // Poczekaj, aż pobieranie się zakończy if (hs_post.error !=null) { print("Wystąpił błąd podczas wysyłania najlepszego wyniku:" + hs_post.error); }}// Pobierz wyniki z bazy danych MySQL do wyświetlenia w GUIText.// pamiętaj, aby użyć StartCoroutine podczas wywoływania tej funkcji!IEnumerator GetScores(){ statusText.text ="Ładowanie wyników"; WWW hs_get =nowy WWW(URL_wysokiej); wydajność zwraca hs_get; if (hs_get.error !=null) { print("Wystąpił błąd podczas uzyskiwania najlepszego wyniku:" + hs_get.error); } else { statusText.text =hs_get.text; // to jest tekst GUI, który wyświetla wyniki w grze. }}ciąg publiczny Md5Sum(string strToEncrypt){ System.Text.UTF8Encoding ue =new System.Text.UTF8Encoding(); byte[] bajty =ue.GetBytes(strToEncrypt); // zaszyfruj bajty System.Security.Cryptography.MD5CryptoServiceProvider md5 =nowy System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] hashBytes =md5.ObliczHash(bajty); // Konwertuj zaszyfrowane bajty z powrotem na łańcuch (o podstawie 16) string hashString =""; for (int i =0; i  

To tylko przykład, jak prawidłowo to zrobić. Jeśli chcesz wdrożyć funkcję sesji i dbać o bezpieczeństwo, zapoznaj się z OAuth 2.0 protokół. Powinny istnieć biblioteki, które pomogą w rozpoczęciu korzystania z OAuth protokół.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz się z bazą danych MSSQL za pomocą Flask-SQLAlchemy

  2. Jak określić literał daty podczas pisania zapytania SQL z serwera SQL połączonego z Oracle?

  3. Jaka jest różnica między varchar a nvarchar?

  4. Czy istnieje sposób uzyskania dostępu do wartości poprzedniego wiersza w instrukcji SELECT?

  5. Jak wykonać zapytanie przekazujące INSERT w programie SQL Server