Ik heb een class (class.database.php)
daarbinnen 2 functies:

<?php
class database extends PDO {

function __construct($dblogin) 
  {
    try 
    {
      parent::__construct('mysql:host=127.0.0.1;dbname='.$dblogin['db'], $dblogin['user'], $dblogin['pass']);
      $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException $e) 
    {
      if ($this->debug) echo $e->getMessage();
    }
  }


  function query($sql, $params = NULL)
  {   
    $starttime = microtime(TRUE);
    try 
    {
      if (is_null($params))
      {
        $results = parent::query($sql);
      }
      else
      {
        $stmt = parent::prepare($sql);
        foreach ($params as $key => $value)
        {
          if (is_int($value))
            $stmt->bindParam($key, $value, PDO::PARAM_INT);
          else if (is_string($value))
            $stmt->bindParam($key, $value, PDO::PARAM_STR);
          else if (is_bool($value))
            $stmt->bindParam($key, $value, PDO::PARAM_BOOL);
          else
            $stmt->bindParam($key, $value, PDO::PARAM_NULL);
        }
        $stmt->execute();
        $results = $stmt->fetchAll();
      }
    }
    catch (PDOException $e) 
    {
      if ($this->debug) echo $e->getMessage();
    }
    $this->log[] = array('sql'=>$sql,'time'=>microtime(TRUE)-$starttime);
    return (isset($results)) ? $results : NULL;
  }

}
?>


de vraag is nu: hoe krijg ik mijn resultaat in de $contacts?

Ik probeer het met de volgende code:
index.php

<?php
$dblogin = array(
    'host' => 'mijnhost',
    'db' => 'mijndb',
    'user' => 'user',
    'pass' => 'pass',
);

include ('class.database.php');
$database = new database($dblogin);
$sql = "SELECT * FROM contacts ORDER BY id";
$contacts = $database->query($sql);

print_r ($contacts);
?>

Wat doe ik verkeerd?

PDO::query en ::prepare retourneren een PDOStatement. Daar moet je de records nog uit fetchen. Alles in 1x kan met fetchAll

print_r($contacts->fetchAll());
Je zou ook direct een query kunnen uitvoeren (dus geen prepare()) en dan de argumenten meegeven als parameter van query().

Dan nog de volgende zaken:
- ik denk dat die typechecks op de argumenten niet zoveel uithalen, zelfs niet als het daadwerkelijk integers, strings en booleans zijn; in de emulatie van prepared statements (wat standaard gebeurt?) wordt volgens mij alles behandeld als string? Kijk maar eens naar de queries die daadwerkelijk worden uitgevoerd, daar wordt als ik het mij goed herinner gewoon alles voorzien van quotes;
- je zou voor de goede orde ook een charset moeten opnemen in de DSN (Data Source Name; de connectie-string)
- waarom haal je alle argumenten uit $dblogin behalve de host(name)?

En voor codeblokken zijn [code][/code] tags.

Reageren