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

Člen

Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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).
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
nefunguje..
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";}
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 !
Zobrazeno 5 zpráv z 5.