[PDO] DML werkt wel, DDL niet.

Pagina: 1
Acties:

Onderwerpen


  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 18:33
Ik heb een database waar ik een drietal tabellen wil aanmaken (mits ze nog niet bestaan). Dit wil ik via PDO doen, echter gebeurt er niks wanneer ik het script uitvoer. Wanneer ik data op wil vragen uit dezelfde database werkt het echter wel.

Dit is mijn code:

PHP:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
     * Connect to database through PDO and return connection object or error message
     */
    public function dbConnect() {
        $dsn = "mysql:host=localhost;dbname=leon;"; // Dns, insert PDO driver here
        $username = "root"; // Database username, default 'root'
        $password = ""; // Database password, default null
        
        try {
            $con = new PDO($dsn, $username, $password, array(1002 => "SET NAMES utf8", PDO::ERRMODE_EXCEPTION)); // Set connection type to UTF-8
        }
        catch (PDOException $e) {
            return 'Connection failed: ' . $e->getMessage();
        }
        return $con;
    }
    
    /**
     * Create table if it doesn't exist yet
     */
    public function createTable() {
        $con = $this->dbConnect();
        
        try {
            $sql = "                    CREATE TABLE IF NOT EXISTS Poll (
                                            id smallint(5) NOT NULL, 
                                            question varchar(255) NOT NULL, 
                                            PRIMARY KEY (id)) 
                                            type=InnoDB;
                                        CREATE TABLE IF NOT EXISTS Answer (
                                            id tinyint NOT NULL, 
                                            answer varchar(255) NOT NULL, 
                                            Pollid smallint(5) NOT NULL, 
                                            PRIMARY KEY (id),
                                            FOREIGN KEY (Pollid) REFERENCES Poll (id))
                                            type=InnoDB;
                                        CREATE TABLE IF NOT EXISTS Vote (
                                            id int(10) NOT NULL, 
                                            ipaddress varchar(255) NOT NULL, 
                                            Answerid tinyint NOT NULL, 
                                            PRIMARY KEY (id),
                                            FOREIGN KEY (Answerid) REFERENCES Answer (id))
                                            type=InnoDB;";
            $con->query($sql);
        }
        catch (PDOException $e) {
            return 'Connection failed: ' . $e->getMessage();
        }
    }


Ik heb zowel exec(), query() als execute() (met een prepared statement) geprobeerd, maar geen van allen werkt. Via google zie ik eigenlijk geen voorbeelden waarin men een tabel aanmaakt via PDO, maar het moet wel mogelijk zijn.

Ik heb tevens de SQL zelf getest in PHPMyAdmin en daar werkt de code gewoon, dus het ligt aan PDO. Er wordt overigens geen PDOException gegooid, de output blijft volledig leeg.

Waarom werkt DML SQL wel maar DDL SQL niet :?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik heb (werkelijk) geen idee, maar je gooit 3x een create table in 1 execute/exec/query; kan dat wel? Werkt het wel als je het met 1 tabel probeert? Wat iets in die strekking vertelt Google me. En wat vertelt de errorInfo() je?

[ Voor 37% gewijzigd door RobIII op 29-09-2010 17:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 18:33
RobIII schreef op woensdag 29 september 2010 @ 17:32:
Ik heb (werkelijk) geen idee, maar je gooit 3x een create table in 1 execute/exec/query; kan dat wel? Werkt het wel als je het met 1 tabel probeert? Wat iets in die strekking vertelt Google me.
Ja die link had ik ook gezien, maar dan zou ik een unbuffered error moeten krijgen lijkt me.

Ik kan het wel eventjes proberen met 1 tabel :)

Edit: noooh dat was het :(
Well, mysterious problem solved :F
RobIII schreef op woensdag 29 september 2010 @ 17:36:
[...]

Als dat een PDOException is wel ja ;)
Ik dacht dat PDO gewoon netjes Exceptions gooide in dit soort gevallen ;( Weer wat geleerd.

Thankss!

[ Voor 22% gewijzigd door Avalaxy op 29-09-2010 17:38 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Avalaxy schreef op woensdag 29 september 2010 @ 17:36:
[...]


Ja die link had ik ook gezien, maar dan zou ik een unbuffered error moeten krijgen lijkt me.
Als dat een PDOException is wel ja ;)
Avalaxy schreef op woensdag 29 september 2010 @ 17:36:
Ik dacht dat PDO gewoon netjes Exceptions gooide in dit soort gevallen ;( Weer wat geleerd.
Ik neem even aan (maar zo diep zit ik niet in PHP) dat er een PDOExeption gegooid wordt voor PDO zaken maar ik kan me voorstellen dat er een HupseFlupsException wordt gegooid voor een bufferprobleem waar ze het op die pagina over hebben. En dan gaat je catch natuurlijk niet werken (althans; dat neem ik ook even aan).

Verder zou je dit alsnog moeten hebben gezien/gevangen als je error_reporting_dinges aan had gestaan lijkt me.

[ Voor 56% gewijzigd door RobIII op 29-09-2010 18:00 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Je voert 3 queries tegelijk uit, dat wordt niet door de PDO-driver voor MySQL ondersteund. Dat dit wel werkt in PhpMyAdmin, komt doordat PMA jouw input opknipt in verschillende queries en deze queries 1-voor-1 gaat uitvoeren.

Oplossing: Voer 3 aparte queries uit.

Ps. Dit probleem staat ook genoemd in het commentaar in de handleiding, scroll maar even naar beneden en zie de problemen met Zend Framework, wat standaard PDO gebruikt.

[ Voor 30% gewijzigd door cariolive23 op 29-09-2010 18:56 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
cariolive23 schreef op woensdag 29 september 2010 @ 18:54:
Je voert 3 queries tegelijk uit, dat wordt niet door de PDO-driver voor MySQL ondersteund. Dat dit wel werkt in PhpMyAdmin, komt doordat PMA jouw input opknipt in verschillende queries en deze queries 1-voor-1 gaat uitvoeren.

Oplossing: Voer 3 aparte queries uit.

Ps. Dit probleem staat ook genoemd in het commentaar in de handleiding, scroll maar even naar beneden en zie de problemen met Zend Framework, wat standaard PDO gebruikt.
Je hebt het topic na de topicstart ook gelezen? TS is er al uit en ik heb 'm allang op exact diezelfde info gewezen ;)

[ Voor 6% gewijzigd door RobIII op 29-09-2010 19:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Sorry hoor, zal nooit meer gebeuren. Gelukkig heb ik nog een linkje naar de manual gegeven, heeft mijn zinloze reactie toch nog een klein beetje toegevoegde waarde.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
cariolive23 schreef op woensdag 29 september 2010 @ 20:00:
Sorry hoor, zal nooit meer gebeuren.
Nou, zo erg was 't ook weer niet hoor ;) :>
cariolive23 schreef op woensdag 29 september 2010 @ 20:00:
Gelukkig heb ik nog een linkje naar de manual gegeven, heeft mijn zinloze reactie toch nog een klein beetje toegevoegde waarde.
Dat zeg ik net; dat linkje (en dan ook nog naar de juiste post :P ) had ik 'm ook al gegeven (onder 'vertelt') ;)

Kopje koffie? :D Afbeeldingslocatie: http://tweakers.net/ext/f/FkFwvMokASgM51W3KZHIsAbu/full.gif

offtopic:
Ik zou het ge-DM-ed hebben als je DM's aan had staan ;)

[ Voor 24% gewijzigd door RobIII op 29-09-2010 20:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Cartman!
  • Registratie: April 2000
  • Niet online
cariolive23 schreef op woensdag 29 september 2010 @ 18:54:
Ps. Dit probleem staat ook genoemd in het commentaar in de handleiding, scroll maar even naar beneden en zie de problemen met Zend Framework, wat standaard PDO gebruikt.
Standaard? Volgens mij ben je in de war... het is 'slechts' een mogelijkheid in ZF ;)
Pagina: 1