Autor | Zpráva | ||
---|---|---|---|
Hando Profil |
Zdravím vás po delší době a opět si vás dovolím požádat o radu.
Dostal jsem se k řešení docházky v php a celkem se mi zalíbilo databázové řešení uvedené zde: http://sqlfiddle.com/#!8/0d13d/1 Nicméně jsem narazil na problém, že uvedené řeší obsluhované php kódem níže funguje na hostingu bez problému, avšak na localhostu nedojde k vypsání dat. phpMyAdmin při vložení SQL dotazu vrátí chybu "#1243 - Unknown prepared statement handler (stmt) given to EXECUTE"; Adminer vykoná dotaz bez problému a zobrazí adekvátní výsledek. Čím to, že se oba mysql klienti chovají tak odlišně a z jakého důvodu tentýž kód na serveru běží a u mě na localhostu dojde jen k vypsání <table><tr></tr></table>? (Tak po instalaci poslední verze WAMP serveru funguje kód i na localhostu, nicméně phpMyAdmin vrací stále tutéž chybu). Dokážete mi, prosím, někdo poradit, či mě posunout nějakým směrem? Chybovou hlášku jsem hledal (zde na diskuzi nic nenalezl), na stackoverflow jsem sice něco nalezl, ale odstranit tuto chybu jsem díky tomu nedokázal. Pokud jsem to pochopil dobře, tak by to měla být chyba v phpMyAdmin, ale proč to zvládal Adminer, ale php kód nikoli, to netuším. Skript obsluhuje stejnou databázi, jako je na sqlfiddle. Pokud je v té troše php něco natolik prasáckého, že by mělo zapříčinolo tak rozdílné chování, tak se předem kaji. :) <?php require_once "include/pripojeni.php"; mysql_query("set session group_concat_max_len=2048"); mysql_query("SET @sql = NULL"); mysql_query(" SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(CASE WHEN ca.date = ''', date_format(date, '%Y-%m-%d'), ''' THEN coalesce(p.status, ''P'') END) AS `', date_format(date, '%Y-%m-%d'), '`' ) ) INTO @sql FROM calendar where date>='2013-06-01' and date <= '2013-06-21'"); mysql_query("SET @sql = CONCAT('SELECT ca.studentname, ca.rollno, ca.class, ', @sql, ' from ( select c.date, a.studentname, a.rollno, a.class from calendar c cross join tbl_admission a ) ca left join tbl_absentees p on ca.rollno = p.rollno and ca.date = p.date where ca.date>=''2013-06-01'' and ca.date <= ''2013-06-21'' group by ca.studentname, ca.rollno, ca.class order by ca.rollno') "); mysql_query("PREPARE stmt FROM @sql"); $query=mysql_query("EXECUTE stmt"); mysql_query("DEALLOCATE PREPARE stmt"); var_dump($query); $columns = mysql_num_fields($query); echo "<table>\n<tr>"; for($i = 0; $i < $columns; $i++) { echo "<th>".mysql_field_name($query,$i)."</th>"; } echo "</tr>\n"; while ($row = mysql_fetch_row($query)) { echo "<tr>"; foreach ($row as $item) { echo "<td>$item</td>"; } echo "</tr>\n"; } echo "</table>\n"; ?> Předem mnohokrát děkuji za ochotu a čas. :) |
||
Fisir Profil |
#2 · Zasláno: 9. 5. 2014, 20:04:25
Reaguji na Handa:
Do Admineru nevidím, takže nevím, proč to zvládá. Nicméně i tady na diskusi se objevil ten záhadný problém, kdy to v phpMyAdminu nejde a jinde ano. Je to tím, že PMA si ten dotaz ještě nějak parsuje a tam může vzniknout chyba. Jestli i Adminer, to nevím. |
||
Časová prodleva: 11 let
|
0