Prepojenie 2 tabuliek PDO – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Prepojenie 2 tabuliek PDO – PHP – Fórum – Programujte.comPrepojenie 2 tabuliek PDO – PHP – Fórum – Programujte.com

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Zelenac140
Newbie
15. 12. 2016   #1
-
0
-

Zdravím, 

začal som sa učiť PDO a robí mi problém prepojiť 2 tabulky cez PDO 

$stmt = $pdo->prepare("SELECT casti.nazov as castiNazov, serial.nazov as serialNazov Form casti JOIN serial ON casti.idSerial = serial.id");

Tabulka casti:

id,nazov,seria,cast,idSerial

Tabulka serial

id,nazov,hodnotenie

Neviem kde vobec chybu robim, lebo pred tým mi ten kód fungoval a na stackoverflow neviem niečo najsť normálne,

Ďakujem za rady

Nahlásit jako SPAM
IP: 188.121.182.–
Zelenac140
Newbie
15. 12. 2016   #2
-
0
-

takto to funguje

 $stmt = $pdo->prepare("SELECT * FROM casti ORDER BY id DESC LIMIT :limit OFFSET :offset");
 $stmt->bindValue(':limit', (int) 12, PDO::PARAM_INT);
 $stmt->bindValue(':offset', (int) 0, PDO::PARAM_INT);
 $stmt->execute();
 while ($row = $stmt->fetchObject()) {  
    $id = $row->id;
    $idSerial = $row->idSerial;
    $nazov = $row->nazov;
    $url = $row->url;
    $cast = $row->cast;
    $seria = $row->seria; 
    $datum = $row->datum;
    
    
    $serailDB = $pdo->prepare("SELECT * FROM serial where id = :idSerial");
    $serailDB->bindValue(':idSerial', $idSerial);
    $serailDB->execute();
    while ($row = $serailDB->fetchObject()){$nazovSerial =$row->nazov;$urlSerial = $row->url;}
    
echo '
      <!-- Nove video -->
      <div class="col-lg-3 col-md-3 col-xs-12 marginTop2" id="noveVidea">
       <a href="">
       
        <div class="view overlay hm-blue-strong noveVidea">
          <img src="images/profil/obal/'.$idSerial.'-'.$urlSerial.'.jpg" class="img-fluid " alt="'.$nazovSerial.' - '.$nazov.'">
           <div class="mask flex-center">
             <p class="white-text"><i class="fa fa-play-circle fa-4x" aria-hidden="true"></i></p>
           </div>          
       
         
          <h3>'.$nazovSerial.' <span style="font-size:20px;">- S'.$seria.'E'.$cast.'</span></h3>  
           <span class="popisNoviniek"><i class="fa fa-clock-o" aria-hidden="true"></i>&nbsp;'.$datum.'</span>
           <span>&nbsp;&bull;&nbsp;</span>     
           <span class="popisNoviniek"><i class="fa fa-comment-o" aria-hidden="true"></i>&nbsp;0</span>
           <span>&nbsp;&bull;&nbsp;</span> 
           <span class="popisNoviniek">'.$jazyk.'</span>  
         </div>    
       </a>         
      </div>';    
 }

ale to podla mna nie je spravne či?

Nahlásit jako SPAM
IP: 188.121.182.–
peter
~ Anonymní uživatel
3497 příspěvků
16. 12. 2016   #3
-
0
-

1. Osobne davam prednost, kdyz id pojmenujes stejne v obou tabulkach.
Tabulka cast: id_cast,nazov, seria, cast, id_serial
Tabulka serial: id_serial, nazov, hodnotenie

2.  Je dobre vyuzit pro dotaz formatovani, zvlast u slozitejsich a kdyz neco nejde 

SELECT 
  casti.nazov as castiNazov, 
  serial.nazov as serialNazov 
Form -- FROM?
  casti
  JOIN serial ON casti.idSerial = serial.id - LEFT JOIN?

3.  

SELECT 
  a.nazov AS castiNazov, 
  b.nazov AS serialNazov 
FROM
  casti a
  LEFT JOIN serial b ON b.id_serial = a.id_serial

Je to mozna trochu neprehledne, ale uz se mi to vyplatilo pri vice slozitejsich dotazech, kdyz dam aliasy k tabulkam, shodne pro vsechny casti programu jako a, b, c ... Nemusi se pak dlouze opisovat nazvy.
Kdyz mam nazvy sloupcu, viz 1, tak nemusim hledat, jak jsem ten sloupec pojmenoval.
Kdyz Joinuji, tak pouzivam JOIN LEFT. Malokdy JOIN jako left + right nebo JOIN RIGHT.
A kdyz joinuji zleva, tak ji pripojuji podle jejiho sloupce id na hodnotu z jine tabulky. Neco, jako kdyz pises WHERE b.id_serial = 123, nepises to 123 = b.id_serial. U joinu to ma svuj vyznam, ale. U where nevim, mozhlo by to byt pomalejsi. Zalezi na tom, jak je sql engine optimalizovany, zda si to sam spravne usporada..

4. ukladej si query do promenne. Kdyz ti pak neco nejede, tak si udelas echo $query. Pripadne nevim, jak to funguje pri skladani dotazu pres pdo->bind, jestli se to da tez vypsat i s promennymi z php.
Pak uvidis, co v tom dotazu je a muzes ho spustit pres phpmyadmin. Vyberes databazi, zalozku sql, vlozis dotaz, kliknes ok. Vypise to chyby nebo treba 0 radku.

5. pouzivej vypisovani chyb.

	public function querySafe($query)
	{
	$this->sth = $this->conn->prepare($query);
	$this->sth_exec = $this->sth->execute();
	return $this->sth;
	}

	public function queryDebug($query)
	{
	echo "\n<div class=\"query\">query = ".$query."</div>";
	$this->querySafe($query);
	if (!$this->sth_exec && $trans==false)
		{
		$this->queryError($this->sth);
		}
	return $this->sth;
	}

	public function queryError($sth)
		{
		if (!$sth) {$this->error('Not sth!'); return;}
		$this->error('Error query: ' . $sth->errorCode().' '.implode(" - ",$sth->errorInfo()));
		}

Cili, kdyz selze sth, lze vypsat
$sth->errorCode().' '.implode(" - ",$sth->errorInfo())
Tim bys odhalil treba tu chybu form / FROM

6. Muzes zkusit obarvovani sql dotazu. Bud primo phpmyadmin nebo ja pouzivam i
http://www.dpriver.com/…qlformat.htm
!!! pamatuj vsak, ze kazdy sql dotaz muze byt monitorovan, ukladan. I v pripade phpmyadmina. Hlavne se vyhybat online sluzbam, pokud chces zajistit bezpecnost. Aby se treba hackeri nedozvedeli, jak mas pojmenovane tabulky, sloupce a pod.
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:a504:82...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 49 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý