query uitvoeren met PDO

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

John Brat

John Brat

01/01/2019 20:46:40
Quote Anchor link
Ik heb een class (class.database.php)
daarbinnen 2 functies:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?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
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
<?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?

Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 01/01/2019 22:47:33 door - Ariën -
 
PHP hulp

PHP hulp

19/04/2024 07:02:42
 
Rob Doemaarwat

Rob Doemaarwat

01/01/2019 21:10:00
Quote Anchor link
PDO::query en ::prepare retourneren een PDOStatement. Daar moet je de records nog uit fetchen. Alles in 1x kan met fetchAll
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
print_r($contacts->fetchAll());
 
Thomas van den Heuvel

Thomas van den Heuvel

01/01/2019 21:47:07
Quote Anchor link
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.
Gewijzigd op 01/01/2019 21:48:25 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.