![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
Będę miał panel, w którym będą podawał takie dane o uczniu:
Cytat id ucznia imię nazwisko ocena Będą dwie tabele: Cytat uczniowie - pola: id imię nazwisko Cytat oceny - pola: id ocena id_ucznia Skrypt będzie wykrywał (po id ucznia, czyli po polu id z tabeli uczniowie) czy taki uczeń jest już w tabeli. Jeżeli jest - to po prostu skrypt doda ocenę do tabeli oceny. Jeżeli nie ma, to najpierw doda imię i nazwisko do tabeli uczniowie, a następnie doda ocenę do tabeli oceny. I właśnie o ten drugi przypadek chciałem zapytać - czy jeżeli napiszę w skrypcie PHP po sobie dwa zapytania MySQL: " to czy jest gwarancja, że jako pierwsze doda się zawsze zapytanie, które jest pierwsze w kodzie (wpis do tabeli uczniowie)? Czy też może się coś zdarzyć (bardzo rzadko, ale jednak), że czasami jako pierwsze doda się zapytanie, które jest niżej w kodzie (wpis do tabeli oceny)? Jeżeli tak, to czy można się przed tym jakoś zabezpieczyć? Czy transakcje mogłyby tutaj pomóc? Ten post edytował Userr 12.03.2017, 16:16:00 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 12 Dołączył: 9.01.2010 Ostrzeżenie: (10%) ![]() ![]() |
Myślę że jak będziesz używał instrukcji warunkowych to będzie Ci to robiło.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 33 Dołączył: 8.09.2014 Ostrzeżenie: (0%) ![]() ![]() |
Zrób dwa widoki. jeden odpowiadający za edycję i dodawanie uczniów do klasy (skoro to ma byc dziennik, to mozesz rozbudować także o klasy, na razie z tego co widać wynika, że jest jedna). następnie drugi widok, gdzie będziesz wstawiał oceny konkretnym uczniom. Z drugiego widoku na serwer powinny polecieć 2 zmienne. Id usera i ocena. U Ciebie wyglada tak, że nauczyciel wpisuje ocenę, imię i nazwisko w jednym formularzu. W takim wypadku jeśli zrobi jakąś literówkę to zostanie dodany nowy uczeń
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
Myślę że jak będziesz używał instrukcji warunkowych to będzie Ci to robiło. Jakie instrukcji warunkowe masz na myśli? Mi chodzi tylko o to, czy zapytanie MySQL, które jest w pierwsze w kodzie zawsze jako pierwsze się wykona? Bo jeżeli nie, to doszło by do sytuacji, że próbuję dodać ocenę dla ucznia, którego jeszcze nie ma w bazie. Albo nie wiem - w momencie wykonywania pierwszego zapytania dojdzie do jakiejś chwilowej awarii czy błędu na serwerze i pierwsze zapytanie nie wykona się, a drugie już tak, bo ta awaria była tylko chwilowa - tylko czy w praktyce to jest możliwe? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tak czy inaczej grupowe inserty zależne od siebie powinny być w transakcji i rollback jeśli coś się nie powiodło.
-------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
Przykładowo te dwie powiązane transakcje:
http://thisinterestsme.com/php-pdo-transaction-example/ Jak dobrze rozumiem transakcje zapewniają, że jeżeli chociaż jedno z tych dwóch zapytań się nie wykona, to nie wykona się żadna z nich, ale czy jest pewność, że jeżeli wykonają się w odwrotnej kolejności (czyli najpierw aktualizacja profilu, a dopiero później dodanie pieniędzy), to też żadna z nich nie zostanie wykonana? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie wykona się w odwrotnej kolejności.
-------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze jedna rzecz mnie zastanawia:
http://thisinterestsme.com/php-pdo-transaction-example/ Czy PDO::ATTR_EMULATE_PREPARES => false może jakoś wpłynąć na bezpieczeństwo? Preparowane zapytania chyba służą właśnie ochronie SQL Injection, więc skoro to wyłączę, czy nie wpłynie to na bezpieczeństwo? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 5.05.2025 - 07:34 |