SQL-Connect mit PDO und mysqli. Probleme

Gast #6189905
Lesenswert?

Guten Abend.
Ich stelle mit Hilfe von chart.js einen Graphen auf einer Website dar, 
der mit Daten einer Datenbank gefüttert wird. Das klappt auch dann, wenn 
ich zur Verbindung zur DB MySqli benutze (Skript unten). Wenn ich aber 
versuche die Verbindung mit PDO herzustellen, bleibt das div mit dem 
Graphen leer...

Den exakt gleichen PDO-Skript nutze ich an anderer Stelle der Website, 
um eine Tabelle zu füllen, und er funktioniert dort!

Ich kann mir leider nicht wirklich erkären, warum die 
Darstellung/Verbindung des Graphen mit der DB nur bei einer der beiden 
Methoden klappt.   Bis auf den Anfang mit der DB-Verbindung ist der Rest 
identisch!

Achso, ich würde gerne, da ich auch auf anderen Seiten und Projekten PDO 
nutze, auch lieber dieses Verfahren nutzen. Ich würde ungern, nur weil 
ich hierbei jetzt nicht den Fehler finde, genau einmal MySqli nutzen 
müssen...

PDO:
1
<?php
2
//setting header to json
3
header('Content-Type: application/json');
4

5
// Zugangsdaten zur Datenbank 
6
$DB_HOST = "localhost";
7
$DB_NAME = "Abstand";
8
$DB_USER = "Klieber";
9
$DB_PASSWD = "...";
10

11
$OPTION = [
12
  PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
13
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
14
 ]; 
15
 
16
 try {
17
 // Verbindung zur Datenbank aufbauen
18
 $pdo = new PDO("mysql:host=" . $DB_HOST . ";dbname=" . $DB_NAME,
19
  $DB_USER, $DB_PASSWD, $OPTION);
20
}
21
catch (PDOException $e) {
22
 // Bei einer fehlerhaften Verbindung eine Nachricht ausgeben
23
 exit("Verbindung fehlgeschlagen! " . $e->getMessage());
24
}
25

26
//query to get data from the table
27
$query1 = "SELECT ID, Abstand, Temperatur FROM Abstand WHERE (IndexMQTT = 1) AND (ID > 180) ORDER BY ID DESC";
28
$query2 = "SELECT ID, Abstand FROM Abstand WHERE (IndexMQTT = 2) AND (ID > 180) ORDER BY ID DESC";
29

30
//execute query
31
$result1 = $pdo->query($query1);
32
$result2 = $pdo->query($query2);
33

34

35
//loop through the returned data
36
$data1 = array();
37
foreach ($result1 as $row) {
38
  $data1[] = $row;
39
}
40

41
$data2 = array();
42
foreach ($result2 as $row) {
43
  $data2[] = $row;
44
}
45

46
$datages = array($data1, $data2);
47

48
//free memory associated with result
49
$result1->close();
50
$result2->close();
51

52
//now print the data
53
print json_encode($datages);
54

55
?>

MySqli:
1
<?php
2
//setting header to json
3
header('Content-Type: application/json');
4

5
//database
6
define('DB_HOST', 'localhost');
7
define('DB_USERNAME', 'Klieber');
8
define('DB_PASSWORD', '...');
9
define('DB_NAME', 'Abstand');
10

11
//get connection
12
$mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
13

14
if(!$mysqli){
15
  die("Connection failed: " . $mysqli->error);
16
}
17

18
//query to get data from the table
19
$query1 = sprintf("SELECT ID, Abstand, Temperatur FROM Abstand WHERE (IndexMQTT = 1) AND (ID > 180) ORDER BY ID DESC");
20
$query2 = sprintf("SELECT ID, Abstand FROM Abstand WHERE (IndexMQTT = 2) AND (ID > 180) ORDER BY ID DESC");
21

22
//execute query
23
$result1 = $mysqli->query($query1);
24
$result2 = $mysqli->query($query2);
25

26

27
//loop through the returned data
28
$data1 = array();
29
foreach ($result1 as $row) {
30
  $data1[] = $row;
31
}
32

33
$data2 = array();
34
foreach ($result2 as $row) {
35
  $data2[] = $row;
36
}
37

38
$datages = array($data1, $data2);
39

40
//free memory associated with result
41
$result1->close();
42
$result2->close();
43

44
//close connection
45
$mysqli->close();
46

47
//now print the data
48
print json_encode($datages);
49
?>

Vielleicht kann mir ja jemand von euch weiterhelfen... :)
#6190373
Lesenswert?

Marco D schrieb:
> PDO:
>
1
> <?php
2
>  try {
3
>  // Verbindung zur Datenbank aufbauen
4
>  $pdo = new PDO("mysql:host=" . $DB_HOST . ";dbname=" . $DB_NAME,
5
>   $DB_USER, $DB_PASSWD, $OPTION);
6
> }
7
> catch (PDOException $e) {
8
>  // Bei einer fehlerhaften Verbindung eine Nachricht ausgeben
9
>  exit("Verbindung fehlgeschlagen! " . $e->getMessage());
10
> }
11
>
Ist 'ne Weile her, wo ich mit PHP programmiert habe:
Ist die Variable
1
$pdo
nach dem try..catch noch bekannt? Ich würde denken,
die ist nur innerhalb des Blocks benutzbar. Leg die doch
mal außerhalb an.

merciless
Gast #6190383
Lesenswert?

Schau dir mal die Ausgabe beider Scripts an, wenn du sie direkt 
aufrufst. Gibt es Unterschiede oder Warnungen, die da nicht hingehören? 
Stelle auch sicher, dass bei der PDO Version keine Abstände, unicode 
BOM, oder vergleichbares am Anfang vor dem <?php steht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren