NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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.

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
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.