[PHP/PDO]BindParam probleem/vraag

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben momenteel bezig met het schrijven van een beheersysteem en maak voor het eerst gebruik van PDO. Nu wil ik een insert in een prepared statement doen, maar er gaat iets fout en ik snap niet waardoor dat komt, ik gebruik nagenoeg dezelfde code als in de manual.

Een stukje van mijn code...

In de construct doe ik het volgende...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    function __construct() 
    {
        if(!$this->dbcon) {
            try {
                $this->dbcon = new PDO (DB_CONTYPE.':dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASSWORD);
            }
            catch (PDOException $e) {
                //error something
                echo $e->getMessage();
            }
        }
        elseif (!is_a($this->dbcon, PDO)) {
            // error something?
            return false;
        }
    }


Vervolgens binnen de functie insert():
PHP:
1
2
3
4
5
6
7
8
9
10
11
            $sql = "INSERT INTO " . $this->getTableName() . " ("
                 .join(", ", array_keys($values)) . ") VALUES ("
                 .join(", ", $fieldsformatted) . ")";

            //INSERT INTO (name, position, listed) VALUES (:parentid, :name, :position, :listed)
            
            $insert =  $this->dbcon->prepare($sql);     
            
            foreach($values as $k => $v) {
                $insert->bindParam (":".$k, $v);
            }


Dit geeft de error:"Fatal error: Call to a member function bindParam() on a non-object in /www/htdocs/pfitzea/nieuw/admin/includes/classes/datawrapper.class.php on line 127".

$insert is geen object, daar zit de fout. Ik doe echter nagenoeg hetzelfde als op http://us2.php.net/manual/en/pdo.prepared-statements.php

Als ik var_dump($this->dbcon) doe dan geeft hij een PDO resource terug. Ik kan ook wel data fetchen, dus de instantie van PDO lijkt mij in orde.

Wat doe ik fout?

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Doe eens bindValue.

[ Voor 64% gewijzigd door Snake op 18-08-2008 15:26 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat triggert dezelfde error helaas :)

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Ik zie geen tablename :)

Ook geef je 3 velden op, en probeer je 4 te inserten.

En waarschijnlijk wil je nog een int inserten terwijl BindParam/BindValue standaard als PDO_PARAM_STR meegeeft :)

[ Voor 78% gewijzigd door Snake op 18-08-2008 15:30 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Snake schreef op maandag 18 augustus 2008 @ 15:28:
Ik zie geen tablename :)

Ook geef je 3 velden op, en probeer je 4 te inserten.

En waarschijnlijk wil je nog een int inserten terwijl BindParam/BindValue standaard als PDO_PARAM_STR meegeeft :)
8)7

Je hebt gelijk, die tabelnaam wordt niet ingeladen vanuit een childclass, erg slordig van me.
Bedankt iig!

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op maandag 18 augustus 2008 @ 15:33:
[...]


8)7

Je hebt gelijk, die tabelnaam wordt niet ingeladen vanuit een childclass, erg slordig van me.
Bedankt iig!
No problem, maar ik zou als ik jouw was toch wat beter definieren wat je types zijn.

Stel dat je een tabel hebt met een id, een text, en een parentkey (verwijzend naar een id in een andere tabel), en je wil de text en de parentkey inserten met jouw code, dan zal dat nooit gaan. Aangezien parentkey een int is, en PDO_PARAM_STR (standaard) wordt jouw parentkey gequoted, en zal ie dus ook een error geven :)

Going for adventure, lots of sun and a convertible! | GMT-8

Pagina: 1