Codeigniger - bardzo dziwne wyniki zapytań

Codeigniger - bardzo dziwne wyniki zapytań
D1
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 6 lat
0

W telegraficznym skrócie: baza danych zwraca dziwne wyniki, nie zwraca ich wcale lub zwraca z opóźnieniem. Np po dodaniu jakiegoś wiersza i redirectie na stronę z wyświetlaniem danej bazy, dodany wiersz się nie pojawia. Po kilku odświeżeniach nagle się pojawia. Jak skasuję , to też czasem znika, czasem nie znika i dopiero po jakimś czasie znika (np. przejdę na inną zakładkę, wrócę na tą z wyświetlaniem bazy i odświeżę). A czasem nawet znów się pojawia choć jest skasowana.

Do tego dochodzą dziwne wyniki. Np w bazie jest wartość 3 a wyświetla się wartość 2 a w drugiej kolumnie zamiast zapisanego czasu wyświetla się 00:00:00. Odświeżam kilka razy i nagle pojawiają się prawidłowe wartości.

Moje tabele
user image
user image

Kontroler - visits_model jest załadowany w konstruktorze

Kopiuj
public function summary(){
		$this->load->model('main_model');
		$visit_id= $this->uri->segment(3);
		$config['visit'] = $this->visits_model->get_visit($visit_id);
		$config['client'] = $this->main_model->show_client($config['visit'][0]['visit_client']);
		$config['view'] = 'visits/summary';
		$this->load->view('templates/content',$config);
	
	} 

Model - reszty użytych tu tabel nie będę pokazywał. Nadmienię tylko że zawierają po kilka-kilkanaście wpisów

Kopiuj
public function get_visit($visit_id){
		$query = $this->db->select('*')->where('visit_id',$visit_id)->join('clients','clients.client_id=visits.visit_client')->join('procedures','procedures.proced_visit=visits.visit_id')->join('offers','offers.offer_id=procedures.proced_offer')->get('visits');
		if ($query->num_rows()>0){
		return $query->result_array();
		}
		else{
		return FALSE;
		}
		} 

public function show_client($id){
		return $this->get_item(array('client_id'=>$id), 'clients');
	}

Funkcja get_item (w rodzicu wszystkich modeli - MY_Model)

Kopiuj
public function get_item($where,$tab_name){
		$query = $this->db->select('*')->where($where)->get($tab_name);
		if ($query->num_rows() > 0 ){
			return $query->result_array();
		}
		else {
			return FALSE;
		}
	} 

A o to błędne wyniki które się wyświetlają. Czasem przez kilkadziesiąt odświeżeń jest dobrze a później przez dalsze kilkadziesiąt tak jak poniżej (oczywiście w międzyczasie w kodzie nic nie jest grzebane).

user image

Nie wiem czy to wersja bazy jest jeszcze "za młoda" i nie jest jeszcze stabilna (MariaDB 5.5.32-2), czy dlatego że jest 64bit, czy kwestia zapytań. Z programowaniem mam do czynienia od ponad miesiąca i w tym przypadku nie wiem nawet gdzie szukać przyczyny. Testowałem na różnych przeglądarkach i jest tak samo. Czasem na Operze lub Chrome jest dobrze a na Firefoksie źle, czasem na wszystkich jest źle lub dobrze. Restartowałem demona mysqld (korzystam z linuxa Arch) i nic nie pomogło.

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:27 dni
  • Lokalizacja:Rzeszów
0

Wątpię, żeby to baza coś mieszała. Jeżeli "to samo" zapytanie MySQL w phpMyAdmin jest ok, to winna jest Twoja aplikacja. Ale co, gdzie - to pewnie trzeba by było cały kod przeglądać, skoro produkuje LOSOWE wyniki.


D1
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 6 lat
0

"W tym szaleństwie jest metoda" chciało by się powiedzieć bo zawsze produkuje albo wynik dobry albo zły ale konkretny. Losowość jest tylko w rodzaju wyniku ale nie w samym wyniku. Poza tym właściwie nie wiem gdzie szukać błędu w kodzie skoro to nie C++ żeby zarządzać pamięcią. A losowość wyników tylko z tego typu błędami mi się kojarzy. Natomiast w PHP zawsze jest konkret - albo błąd jest, albo go nie ma. Nawet jeżeli jest mocno ukryty i wywołuje go specyficzna sytuacja to właśnie ów fakt specyficzności sprawia że można go namierzyć. A w tym przypadku nie robię nic specyficznego oprócz przełączania się to na jedną to na drugą kartę lub przeglądarkę, nic więcej.

Jedynie co przychodzi mi na myśl to transakcje. Ale one chyba nie mogłyby popsuć niczego poza metodą w której są uruchamiane.

//edycja
Sprawdzałem bazę poleceniem mysqlcheck. Za pierwszym razem wieszało się na tabeli clients którą joinowałem do visits. Zrestartowałem bazę, problem chyba ustąpił ale robiąc mysqlcheck znów wieszało się, tym razem na tabeli offers. Więc ewidentnie coś jest nie tak z bazą. Prosiłbym o potwierdzenie czy na podstawie wyników (a w zasadzie ich braku) mam prawo tak zakładać (i tym samym założyć odpowiedni topik), czy jednak mysqlcheck niczego nie przesądza i szukać jeszcze w kodzie.

@hzmzp
Heh, gdyby baza była gdzieś w świecie to tak. Ale na lokalnym kompie? Bo nie wierzę że jakieś dyskowe problemy przekładały by się w tak "ułożony" sposób na warstwę softwarową. Prędzej to w ogóle byłaby kaszana. Być może za często robię update mysql'a :D

edytowany 2x, ostatnio: doman18
hzmzp
W tam wypadku mnie się nic nie nasuwa na myśl tylko błędy sprzętowe xD
hzmzp
Weź wyexportuj baze do pliku, postaw (najlepiej na innym kompie) server SQL'a i zaimportuj dane, zmień konfig stronki żeby zasysał dane z nowej bazy i zobaczy czy wywalać będzie takie błędy. Jeżeli nie wina servera db, jeżeli tak to spróbuj tak samo z stroną jeżeli błędy bd dalej to wina kodów - nie wina kompa/oprogramowania na nim... To trochę na około ale może pomoże zdiagnozować błąd.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)