Versio

PDO Probleem

Overzicht Reageren

Han eev

Han eev

08/03/2008 20:51:00
Quote Anchor link
Heey,

Ik ben maar eens bezig gegaan met PDO.
Alleen, ik heb een probleem. (natuurlijk)

Ik heb een query
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
// Dit is mijn $sql
UPDATE
tabel
SET
naam = :naam,
kop = :kop,
text = :text
WHERE
id = :id


Leuk en aardig :)
De waardes haal ik uit een array,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?PHP
$arr
= array(
'naam'=>'enz...'
);

$prepared = $pdo->prepare($sql);

foreach($arr as $key => $val) {
$val = $val; // Hier ga ik in mijn eigen script iets aan veranderen dan
$prepared = bindParam(':'.$key,$val, PDO::PARAM_STR);
}


$prepared->execute();
?>


En weetje wat ik kreeg?
Alle velden met 11 (id van die regel).

Ik heb al van alles geprobeerd, maar hoe los ik dit op, dus dat elke waarde zijn eigen waarde krijgt. Dit komt overigens omdat de laatste $val (=11) gebruikt worden in elke $val omdat het in bindParam ook wordt gebruikt (zie php.net)

Weet iemand hier een goede oplossing voor?
in de execute de array doorsturen werkt niet, overigens.

Alvast bedankt!
Als ik dit weet kan ik weer verder :)

mvg,
Han

Edit::
Hoe kan je zien wat de totale query wordt van die je klaargemaakt hebt voordat je hem execute? (misschien weet iemand dit?) op google kon ik niet echt vinden.
Gewijzigd op 01/01/1970 01:00:00 door Han eev
 
PHP hulp

PHP hulp

25/05/2012 09:55:41
Gesponsorde koppelingen:
 
Jan geen

Jan geen

08/03/2008 21:51:00
Quote Anchor link
Die execute() moet in je foreach (klik)

edit: je constructie klopt niet helemaal klik even op die link om te zien hoe het wel moet...
Gewijzigd op 01/01/1970 01:00:00 door Jan geen
 
Han eev

Han eev

08/03/2008 21:58:00
Quote Anchor link
Je hebt helemaal gelijk, dat is idd mijn probleem :)

Je moet aangeven naar welke var hij moet kijken, en dan ga je die vullen voordat je execute doet. :)

Thnx!
 
Han eev

Han eev

09/03/2008 12:16:00
Quote Anchor link
Sorry, als ik zo vroeg 'bump', tis niet echt bumpen ^^.

Maarja,

Probleem met exucute(array $waardes)

Het gaat goed als ik letterlijk de array uitschrijf en die meegeef in de execute.
Maar als ik de array laat genereren. (door mijn form handler). en die mee geef, dan doet hij niets. Het rare is dat execute false terug geeft. dus er gaat iets fout, maar errorInfo geeft 00000 terug. Ook krijg ik geen exception oid.

Wat doe ik fout?
Dus letterlijk array uitschrijven en meegeven gaat goed, array zelf maken en meegeven gaat fout.

Wat doe ik verkeert?

Gr Han
 
Jelmer rrrr

Jelmer rrrr

09/03/2008 12:36:00
Quote Anchor link
var_dump beide arrays eens, en zoek de verschillen :)
 
Han eev

Han eev

09/03/2008 12:42:00
Quote Anchor link
Dat is nou juist het rare, want die zijn er niet, ik heb ze precies hetzelfde gemaakt! Ik snap er niets van.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Werkt niet.

Array
(
    [:kop] => titel
    [:type] => 0
    [:text] =>

werkt dit?1212

    [:img] =>
    [:WHid] => 11
)

Werkt wel.

Array
(
    [:kop] => titel
    [:img] =>
    [:text] => werkt dit?
    [:WHid] => 11
    [:type] => 0
)


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?PHP
// SQL parsen
    public function parseSQL($sql,$data) {
    
    
    
        $prep = self::$pdo->prepare($sql);        
        // Lopen en Binden

        $arr = array();
        
        foreach($data as $key => $val) {        
            $arr[':'.$key] = $val;
        }

    
        

//        $arr = array(':kop'=>'titel',':img'=>'',':text'=>'werkt dit?',':WHid'=>11,':type'=>'0'); // Deze werkt dus wel, maar die data erboven niet

        // Fout

        $res = $prep->execute($arr);

        
        if($res === false) {
            $err = self::$pdo->errorInfo();
            self::Adderr($err[2] . ' - SQL:'. Overig::ColorSQL($sql));
        }
else {
            return true;
        }
    }

?>


Hardcoded doet het, zelf gemaakt niet...
 
Han eev

Han eev

10/03/2008 17:39:00
Quote Anchor link
Toch maar even een soort van Bump...

Zelfde probleem, en wat vinden jullie van

Het gebruik van references? (het '&' tekentje?)
Gebruiken jullie dat veel, of raden jullie het helemaal af?

gr Han
 
Ivo van Beek

Ivo van Beek

10/03/2008 17:47:00
Quote Anchor link
In PHP5 is alles standaard by reference dus heb je het & tekentje niet meer nodig.
 
Joren de Wit
Beheerder

Joren de Wit

10/03/2008 17:50:00
Quote Anchor link
Ik weet zo uit mijn hoofd niet zeker of de volgorde van de parameters in je gegevensarray uitmaakt of niet.

In je voorbeeld zijn volgorde van de parameters in beide arrays niet hetzelfde. Je zou verwachten dat dit niets uitmaakt, maar proberen kan natuurlijk nooit kwaad...
 
Han eev

Han eev

10/03/2008 18:36:00
Quote Anchor link
Na veel gepruts toch gelukt :)
wat het nu precies is, ik heb echt geen idee.

Maar bedankt voor de Opmerkingen!

Maar volgens mij is niet alles reference, want dat zou beetje fout zijn...

Want dan zal dit niet goed gaan, en dat gaat het wel.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?PHP
class test {
    public $test = '';
    
    public function set(&$data) {
        $this->test = &$data;
    }

    
    public function ikke() {
        echo $this->test;
    }
}


$t = new test;

$ikke = 'gek';

$t->set($ikke);

$ikke = 'boe';

echo $t->ikke(); // Dit geeft nu BOE, zonder die ennetjes geeft GEK...
?>



Dus :)
 



Overzicht Reageren

Get Adobe Flash player