NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze: Problém s funkcí foreach

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
Mark Vajšbejn:21.8.2015 19:00

Zdravím,
snažím se si ulehčit práci malou funkcí, do které zadám SQL dotaz který v funkci zpracuji pomocí pdo prepare 'funkce' (většinou s nějakými předdefinovanými místo pro 'vložení' variablu [:name, :id, atd..]), a parametry, které se pomocí pdo bindParam 'funkce' snažím 'nabindovat' do SQL dotazu.

<?
public function query($sql, $params) {
        try {
        $request = self::$connection->prepare($sql); // Přístup k databázi je vždy. :-) - V classe

        foreach($params as $param_key => $param_value) {
            $request->bindParam($param_key, $param_value);
        }

        $request->execute();

        self::close(); // Definováno v classe (ignorujte)

        return true;
    } catch (PDOException $error) {
        die("Nastala chyba v dotazu: ".$error->getMessage());
    }
}

A funkci volám tímto stylem:

$volana_classa->query("INSERT INTO `users` (`username`, `password`, `email`, `reg_time`, `reg_ip`) VALUES (:user, :pass, :email, :time, :ip)",
array(":user" => $d['user'] /* zkoušl jsem i přímý variable.. místo $d['....'] */, ":pass" => $d['pass'], ":email" => $d['email'], ":time" => $d['reg_time'], ":ip" => $d['reg_ip']));

.. A ta funkce se vlastně i provede, vše se do databáze vloží, ale na všech polích v databázi se místo dle předdefinovaných věci vloží jen IP adresa.. Zkoušel jsem si i všechny data vypsat, což také všechny má zadávaná data vypsalo - a dokonce správně.. Ale v rámci této funkce se tomu jakoby nechtělo.. :|

Budu rád za jakoukoliv radu :)
Díky.

Editováno 21.8.2015 19:01
 
Odpovědět
21.8.2015 19:00
Avatar
Mark Vajšbejn:22.8.2015 22:25

Problém jsem již vyřešil. :)
.. Stačilo bindParam přeměnit na bindValue kvůli tomu, že bindParam v případě arraye "$d['neco']" přiděluje poslendní přiřazené 'něco' do arraye, a value pracuje s tím, co se přesně z arraye předá. :) - Nevím přesně jak to popsat, tak jsem to takhle pozkomolil.

.. Případně stačilo (což jsem již věděl díky spolukódícímu, ale chtěl jsem rozlousknout toto) přidat variable '$params' do ->execute() a bindParam či bindValue prostě vynechat. :)

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
+3
22.8.2015 22:25
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 2 zpráv z 2.