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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marco D (Gast)


Bewertung
0 lesenswert
nicht 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:
<?php
//setting header to json
header('Content-Type: application/json');

// Zugangsdaten zur Datenbank 
$DB_HOST = "localhost";
$DB_NAME = "Abstand";
$DB_USER = "Klieber";
$DB_PASSWD = "...";

$OPTION = [
  PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
 ]; 
 
 try {
 // Verbindung zur Datenbank aufbauen
 $pdo = new PDO("mysql:host=" . $DB_HOST . ";dbname=" . $DB_NAME,
  $DB_USER, $DB_PASSWD, $OPTION);
}
catch (PDOException $e) {
 // Bei einer fehlerhaften Verbindung eine Nachricht ausgeben
 exit("Verbindung fehlgeschlagen! " . $e->getMessage());
}

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

//execute query
$result1 = $pdo->query($query1);
$result2 = $pdo->query($query2);


//loop through the returned data
$data1 = array();
foreach ($result1 as $row) {
  $data1[] = $row;
}

$data2 = array();
foreach ($result2 as $row) {
  $data2[] = $row;
}

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

//free memory associated with result
$result1->close();
$result2->close();

//now print the data
print json_encode($datages);

?>

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

//database
define('DB_HOST', 'localhost');
define('DB_USERNAME', 'Klieber');
define('DB_PASSWORD', '...');
define('DB_NAME', 'Abstand');

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

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

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

//execute query
$result1 = $mysqli->query($query1);
$result2 = $mysqli->query($query2);


//loop through the returned data
$data1 = array();
foreach ($result1 as $row) {
  $data1[] = $row;
}

$data2 = array();
foreach ($result2 as $row) {
  $data2[] = $row;
}

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

//free memory associated with result
$result1->close();
$result2->close();

//close connection
$mysqli->close();

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

Vielleicht kann mir ja jemand von euch weiterhelfen... :)

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Marco D schrieb:
> PDO:
>
> <?php
>  try {
>  // Verbindung zur Datenbank aufbauen
>  $pdo = new PDO("mysql:host=" . $DB_HOST . ";dbname=" . $DB_NAME,
>   $DB_USER, $DB_PASSWD, $OPTION);
> }
> catch (PDOException $e) {
>  // Bei einer fehlerhaften Verbindung eine Nachricht ausgeben
>  exit("Verbindung fehlgeschlagen! " . $e->getMessage());
> }
> 
Ist 'ne Weile her, wo ich mit PHP programmiert habe:
Ist die Variable
$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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.