Avatar
Mark Vajšbejn:

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:

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.