Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Problém s funkcí foreach

PHP PHP Problém s funkcí foreach American English version English version

Aktivity (1)
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.