Forum: PC-Programmierung SQL-Connect mit PDO und mysqli. Probleme


von Marco D (Gast)


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... :)

von Jim M. (turboj)


Lesenswert?

Ich sehe keine Fehlerbehandlung falls der Query Aufruf fehlschlägt - nur 
der Verbindungsaufbau wird abgefangen. Und ja, auch query() kann 
Exceptions werfen.

Eventuell ist da einfach irgendwo ein simpler Tippfehler drin...

von Dirk K. (merciless)


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

von DPA (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.