NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Mario Brunmayr:6.7.2017 22:18

Ahoj mám kod který má přišíst hodnotu buňky o hodnotu v proměnné podle podmínky ale SQL se nevykoná protože PDOexception. Samotné SQL má vypadat takto:

UPDATE sazky
SET zetony = zetony + $sazka
WHERE id_uzivatele = $_SESSION['uzivatel']['uzivatele_id']

PHP kod

db::zmen('sazky', array('zetony=zetony+' => "$sazka"), 'WHERE id_uzivatele = ?', $_SESSION['uzivatel']['uzivatele_id'] );

Chyba

Warning: array_merge(): Argument #2 is not an array in C:\xampp\htdocs\modely\Db.php on line 88

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'zetony=zetony+' in 'field list'' in C:\xampp\htdocs\modely\Db.php:70 Stack trace: #0 C:\xampp\htdocs\modely\Db.php(70): PDO->prepare('UPDATE `sazky` ...') #1 C:\xampp\htdocs\modely\Db.php(88): Db::dotaz('UPDATE `sazky` ...', NULL) #2 C:\xampp\htdocs\modely\Ruleta.php(39): Db::zmen('sazky', Array, 'WHERE id_uzivat...', 21) #3 C:\xampp\htdocs\kontrolery\RuletaKontroler.php(38): Ruleta->sazkaCernaCervena('2', '5') #4 C:\xampp\htdocs\kontrolery\SmerovacKontroler.php(59): RuletaKontroler->zpracuj(Array) #5 C:\xampp\htdocs\index.php(22): SmerovacKontroler->zpracuj(Array) #6 {main} thrown in C:\xampp\htdocs\modely\Db.php on line 70

volaná metoda

public static function zmen($tabulka, $hodnoty = array(), $podminka, $parametry = array()) {
        return self::dotaz("UPDATE `$tabulka` SET `".
        implode('` = ?, `', array_keys($hodnoty)).
        "` = ? " . $podminka,
        array_merge(array_values($hodnoty), $parametry));
}

Předem děkuji moc za pomoc.

 
Odpovědět
6.7.2017 22:18
Avatar
Miskyns
Člen
Avatar
Miskyns:6.7.2017 22:35

Máš tady chybu jasně ti to píše :)

array('zetony=zetony+' => "$sazka")

Nebyl nalezen sloupeček se jménem zetony=zetony+ :)
Jelikož ty takhle ukládáš tu hodnotu do "zetony=zetony+" a ne do "zetony"...

Editováno 6.7.2017 22:36
Nahoru Odpovědět
6.7.2017 22:35
Proč se to učit, když můžeš použít GOOGLE...
Avatar
Miskyns
Člen
Avatar
Miskyns:6.7.2017 22:40

Jsou dvě možnosti jak to opravit...

Možnost

  1. Získat žetony, které jsou uložené v databázi potom v PHPčku připočítat tu hodnotu z buňky a vložit ji zpátky.
  2. Udělat to následovně (rychlejší způsob)
db::update('UPDATE sazky SET zetony=zetony + :zetony', array(':zetony', $zetony_bunka));

Bohužel nevidím celý kód jak to ukládáš do databáze, takže se nemůžu podle toho odrazit, ale něco na ten způsob bych udělal :)

Editováno 6.7.2017 22:40
Nahoru Odpovědět
6.7.2017 22:40
Proč se to učit, když můžeš použít GOOGLE...
Avatar
Odpovídá na Miskyns
Mario Brunmayr:6.7.2017 22:40

Takže operátor = mi tu převede na výraz, který nemá funkci ? Budu asi muset vytvořit novou funkci v db wraperu co ? :(

 
Nahoru Odpovědět
6.7.2017 22:40
Avatar
Miskyns
Člen
Avatar
Odpovídá na Mario Brunmayr
Miskyns:6.7.2017 22:41

Nejspíš ano, jelikož ty ukladáš tu proměnnou z PHPčka do kolonky zvanou "zetony=zetony+", ale ty to chceš uložit do "zetony"

Akceptované řešení
+20 Zkušeností
Řešení problému
Nahoru Odpovědět
6.7.2017 22:41
Proč se to učit, když můžeš použít GOOGLE...
Avatar
Odpovídá na Miskyns
Mario Brunmayr:6.7.2017 23:02

vyřešeno tímto scriptem

        $sazka1[0]=$sazka;
        $sazka1[1]=$_SESSION['uzivatel']['uzivatele_id'];
        db::dotaz("UPDATE sazky
SET zetony = zetony + ?
WHERE id_uzivatele = ?", $sazka1);

DB wraper

public static function dotaz($dotaz, $parametry = array()) {
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->rowCount();
}

Děkuji za správné nasměrování.

 
Nahoru Odpovědět
6.7.2017 23:02
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 6 zpráv z 6.