MySQL - błędne zapytanie(PHP)

0

Cześć.
Mam pewien problem z zapytaniem i się Was pytam, czy ono jest dobre? Coś mi się jednak wydaje, że nie, gdyż nie wczytują się szablony(mybb) i jest cała biała strona.

[code]
$query = $db->query('
SELECT t.subject, t.tid, p.message
FROM ' . TABLE_PREFIX . 'threads t
LEFT JOIN ' . TABLE_PREFIX . 'posts p ON (t.firstpost = p.pid)
WHERE t.fid = '1207. '
ORDER BY t.tid DESC ');
[/code]

0

Brak kropki przed 1207

0

Nadal to samo.

0

Wpisz to zapytanie w postaci do jakiegoś phpMyAdmin czy coś dla jakiś przykładowych danych (nie wykonuj zapytania, a wyświetl wygenerowany string) i zobacz co się dzieje.

0

[code]
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' . TABLE_PREFIX . 'threads LEFT JOIN ' . TABLE_PREFIX . 'posts p ON (t.firs' at line 2
[/code]

0

Zrób:

$sql = 'SELECT t.subject, t.tid, p.message 
    FROM ' . TABLE_PREFIX . 'threads t
    LEFT JOIN ' . TABLE_PREFIX . 'posts p ON (t.firstpost = p.pid) 
    WHERE t.fid = '1207. '  
    ORDER BY t.tid DESC ';

var_dump($sql);

//$query = $db->query($sql);

I powinieneś zobaczyć swojego stringa zapytania i co jest źle nim - wygląda mi na to, jakby te stałe TABLE_PREFIX wcale nie były zamieniane na jakieś wartości, a dalej miały postać TABLE_PREFIX.

0

Niestety nic się nie wyświetla. Białe tło...

0

Więc masz błąd gdzieś wcześniej.

Zrób np. echo 'here:' . __LINE__; gdzieś wcześniej w kilku miejscach i zobacz w której linii przestanie się wyświetlać. Błąd jest gdzieś tam. Albo - jak ludzie - włącz wyświetlanie błędów na serwerze (error_reporting na E_ALL, display_errors na on)/przejrzyj logi błędów, powinieneś dowiedzieć się co jest nie tak. Pusta biała strona to zazwyczaj jakiś Fatal error, niedomknięty nawias, brak średnika i te sprawy.

Co do błędu SQL wcześniej - tak właśnie mi się wydaje, że wziąłeś to zapytanie napisane i przekopiowałeś do phpMyAdmin? To nie miało prawa działać, trzeba je zmienić tak, aby dodać choćby te stałe TABLE_PREFIX ręcznie, metoda copy&paste musiała spowodować taki błąd.

0

http://pastebin.com/VwnafZFW

Cały kod. Wszystkie sposoby, które mi podałeś - nic nie pomagają, nie wyświetlają żadnych błędów etc.

0

Trochę wydaje mi się niemożliwe, aby nie było żadnych błędów, bo ja w tym kodzie widzę przynajmniej dwa.

Ten ważniejszy z nich jest tutaj:

 $query = $db->query(' 
    SELECT t.subject, t.tid, p.message 
    FROM ' . TABLE_PREFIX . 'threads t
    LEFT JOIN ' . TABLE_PREFIX . 'posts p ON (t.firstpost = p.pid) 
    WHERE t.fid = '1207. '  
    ORDER BY t.tid DESC ');

1207. jest poza stringiem i nie jest z nim złączone. Błąd składniowy, akurat nadający się do wyświetlenia pustej strony. String kończy się na ' po t.fid = ', a potem znikąd pojawia się jakieś 1207. Powinna być kropka przed 1207 albo w ogóle nie powinno być tam apostrofów, bo nie są potrzebne, albo ktoś chciał zastosować apostrofy jako oznaczenie kawałka wyrażenia, ale mu niezbyt wyszło, bo nie zrobił \'.

Błąd jest do zauważenia od razu gdy spojrzy się na kod pokolorowany składniowo. Aż dziwne, że kilka postów temu nikt (włącznie ze mną) tego nie zauważył.

0

Po naniesionych poprawkach, wyskoczył błąd SQL.

[code]
MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''.1207 ORDER BY t.tid DESC' at line 4
Query:
SELECT t.subject, t.tid, p.message FROM mybb_threads t LEFT JOIN mybb_posts p ON (t.firstpost = p.pid) WHERE t.fid = '.1207 ORDER BY t.tid DESC
[/code]

0

[code] SELECT t.subject, t.tid, p.message FROM mybb_threads t LEFT JOIN mybb_posts p ON (t.firstpost = p.pid) WHERE t.fid = 1207 ORDER BY t.tid DESC
[/code]

1 użytkowników online, w tym zalogowanych: 0, gości: 1