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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: