NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Mezinárodní den IT společnosti je tady! Pouze nyní můžeš získat 90 % extra kreditů při nákupu od 1199 kreditů s promo kódem AJTACI90. Tak neváhej!

Diskuze: sql

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
Neaktivní uživatel:24.4.2018 0:47

$sql = "UPDATE host SET rok=$rok WHERE id=$id";
if ($conn->query($sql) === TRUE) {
echo " Nastala zmena na rok .$rok. ";
} else {
echo "Niečo sa pokazilo " . $conn->error;
}
$conn->close();

KDE jE problem, v php mi to stale vyhadzuje nastala zmena... aj ked id nie je

Odpovědět
24.4.2018 0:47
Neaktivní uživatelský účet
Avatar
Pavol Hejný
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Pavol Hejný:24.4.2018 1:08

PDO query vrací objekt PDOStatement, který se vyhodnotí jako true, pokud SQL dotaz prošel (bez ohledu na to, zda to nějaké řádky ovlivnilo).

http://php.net/…do.query.php

zkus to pozměnit takto:

$sql = "UPDATE host SET rok=:rok WHERE id=:id";
$query = $conn->prepare(sql);
$query ->bindParam(':rok', $rok);
$query ->bindParam(':id', $id);
$query->execute();
if ( $query->rowCount()) {
echo " Nastala zmena na rok .$rok. ";
} else {
echo "Niečo sa pokazilo " . $conn->error;
}
$conn->close();

PS: Do toho SQL ty hodnoty vkládej jako parametry prepared statementu. Pokud bys to totiž vkládal přímo, můžeš lehce vytvořit nebezpečnou bezpečnostní díru. Viz. můj článek:
https://www.itnetwork.cz/…vou-aplikaci

Nahoru Odpovědět
24.4.2018 1:08
/^(web )?(app )?developer$/
Avatar
Neaktivní uživatel:24.4.2018 1:59

nefunguje..

Nahoru Odpovědět
24.4.2018 1:59
Neaktivní uživatelský účet
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24.4.2018 7:52

Viz Hejny, pokud je sql dotaz spravne, tak, at uz smaze radek nebo je 0 smazanych, je to true. A jedinou moznosti je zjistit to pres rowCount. Jestli jeho kod nefunguje, mame tu google, muzes najit 1000 dalsich kodu s pouzitim rowCount.
Ja pouzivam kod, ktery vypada asi takhle. Netusim, zda nekde resim i rowCount.

$conn = new PDO(...);
$sth = $conn->prepare($query);
...
$sth_exec = $sth->execute();
if (!$sth_exec)
        {
        if (!$sth) {echo 'Not sth!';}
        echo 'Error query: ' . $sth->errorCode().' '.implode(" - ",$sth->errorInfo());
        }

Tak jo, nasel jsem cas kodu i s rowCount. Mam to ale obalene v class. $sql->query mi returnuje $sth. Viz poskladani z predchoziho kodu, ktery jsem upravoval z te me class $sql.

$query  = $sql->createDelete($tbl,$data_delete);
$result = $sql->query($query);
if ($sql->sth_exec && $result->rowCount()>0)
        {echo "Smazano ".$result->rowCount()."radku";}
else    {echo "Error sth nebo smazano 0";}
 
Nahoru Odpovědět
24.4.2018 7:52
Avatar
Roman Havránek:24.4.2018 9:50

Ahoj,

mám takto jednoduchou úlohu vyřešenou pomocí PDO a OOP.

Zde je jednoduchý zdroják:

public function zaplat($id)
{
        $dotaz = $this->spojeni->prepare("UPDATE `prihlasky` SET `platba` = 'Ano' WHERE `prihlasky`.`id`= '$id' LIMIT 1 ");
        $dotaz->execute();
  if ($dotaz)
      {
        echo ("<h1> <center> <span style=color:green>Úspěšně jsi zaplatil");
        echo ("<br> Budeš přesměrován<h1> <center>");
        header("Refresh: 2; url=../admin/index.php");
      }
}

Musíš mít v dotazu, že bude limitován pro 1.
Snad jsem ti pomohl ! :) ;)

Nahoru Odpovědět
24.4.2018 9:50
sleep();
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 5 zpráv z 5.