IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
jaroox
Člen
Avatar
jaroox:23.1.2019 23:14

Ahoj, řeším takový problém s vybíráním dat z jedné tabulky podle dat jiné.

SQL:
CREATE TABLE table2 (
id INT NOT NULL AUTO_INCREMENT,
first BOOLEAN NOT NULL DEFAULT FALSE,
second BOOLEAN NOT NULL DEFAULT FALSE,
third BOOLEAN NOT NULL DEFAULT FALSE,
fourth BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY(id)
);

CREATE TABLE table1 (
id INT NOT NULL AUTO_INCREMENT,
table2_id INT NOT NULL,
....
PRIMARY KEY (id),
CONSTRAINT table1_table2 FOREIGN KEY (table2_id) REFERENCES table2(id)
);

PHP:
$query = $this->database->table("table1");
$query->whereOr(array(
'table2.first' => $data["first"],
'table2.second' => $data["second"],
'table2.third' => $data["third"],
'table2.fourth' => $data["fourth"]
));

Problém je v tom, že mi to vrací chybu, že řádek neexistuje. Vše fungovalo, dokud jsem nereinstaloval PC - tudíž i XAMPP. Zkoušel jsem to spustit i na serveru, ale tam to funguje. Verzi MySQL mám stejnou. PHP mám 7.3 a na tom serveru je 7.0.32. Nevíte, čím to může být? :)

 
Odpovědět
23.1.2019 23:14
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24.1.2019 8:19

Vypis si sql dotaz na obrazovku a pouzij do phpmyadmina. (echo $query nebo, jak se to dela u tveho objektu)
Podle mne, asi nemas vytvorenou db a nebo v ni nemas data. Si ze serveru udelej export dat.

Editováno 24.1.2019 8:20
 
Nahoru Odpovědět
24.1.2019 8:19
Avatar
jaroox
Člen
Avatar
Odpovídá na Peter Mlich
jaroox:24.1.2019 19:30

Ahoj. Tak přidávám vygenerované SQL dotazy. Zjistil jsem, že z nějakého důvodu se na serveru generuje jiné SQL (to správné).

SQL ze serveru:
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.table2_id = table2.id WHERE ((table2.first = ?) OR (table2.second = ?) OR (table2.third = ?) OR (table2.fourth = ?)) ORDER BY id DESC

SQL, které se vygeneruje na localu:
SELECT * FROM table1 WHERE ((table2.first = ?) OR (table2.second = ?) OR (table2.third = ?) OR (table2.fourth = ?)) ORDER BY id DESC

Kód PHP je stejný a obsah databáze také.

 
Nahoru Odpovědět
24.1.2019 19:30
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24.1.2019 21:13

takze mas spatne php. Zkontroluj si, co to dela, treba si vypisuj podminky. Cela ta cast s LEFT JOIN ti tam chybi. Ostatni je pulka pred a pulka za tim

 
Nahoru Odpovědět
24.1.2019 21:13
Avatar
jaroox
Člen
Avatar
Odpovídá na Peter Mlich
jaroox:24.1.2019 21:39

PHP kód mám přesně podle dokumentace, žádnou chybu tu nevidím... nemůže tam být nějaká nekompatibilita s nejnovějším PHP?

 
Nahoru Odpovědět
24.1.2019 21:39
Avatar
Odpovídá na jaroox
Neaktivní uživatel:24.1.2019 22:15

Cache? Zkus smazat všechno co je ve složce temp/

Nahoru Odpovědět
24.1.2019 22:15
Neaktivní uživatelský účet
Avatar
jaroox
Člen
Avatar
Odpovídá na Neaktivní uživatel
jaroox:24.1.2019 22:31

To už jsem zkoušel, stále nic. :/

 
Nahoru Odpovědět
24.1.2019 22:31
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:25.1.2019 7:47

Tak jeste jednou. Pokud si das zobrazit sql dotaz a ten je spatne, a vytvarel jej php kod, tak je chyba v php kodu.
Pokud jsi poskladal dotaz podle dokumentace, ok, ale v tom pripade je chyba v php kodu te knihovny, kterou pouzivas.
Protoze o tom kodu nic nevime, tak ti nemuzeme k tomu jiz vice rici.
Mozna na tohle autori mysleli a je tam nejaka funkce, ktera to resi, ale neni uvedena v prikladu.

 
Nahoru Odpovědět
25.1.2019 7:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.