MySQL-Verbindung über PDO herstellen?

4 Antworten

Wie kann ich hierbei die einzelnen Strings (von oben) den Variablen zuordnen?

Indem du ein Objekt der Klasse DATABASE_CONFIG erstellst und dann auf deren Attribut (das assoziative Array) zugreifst. Mittels der Keys kannst du aus diesem Array die notwendigen Werte holen, die du benötigst.

$dbConfiguration = new DATABASE_CONFIG();
$dbConfigurationData = $dbConfiguration->default;
$login = $dbConfigurationData["login"];
// etc. ...
Wenn man ein bisschen googelt findet man als Lösung bzw. Fehlerermittlung, dass es diese Klasse schon gibt.

Ähm... also eigentlich steht genau das bereits ganz eindeutig in der Fehlermeldung. 😶

In der Datei, die vom Website-Root aus unter diesem Pfad: include/config/database.php zu finden ist, wird in Zeile 4 versucht, die Klasse erneut zu deklarieren, obwohl sie bereits bekannt ist. Ich könnte mir gut vorstellen, dass du die Datei irgendwo doppelt inkludierst.

Nutze entweder einen Autoloader, der für dich benötigte PHP-Ressourcen einbindet oder achte darauf, include_once oder require_once zum Inkludieren von PHP-Dateien zu nutzen.

ich glaube so:

$pdo = new PDO("$default['driver']:host=$default['host'];dbname=$default['database']", $default['login'], $default['password']);

oder meinst du was anderes?

Edit:

<?php

class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'benutzername', 'password' => 'MeinPasswort', 'database' => 'datenbankname', 'prefix' => '', ); }

Warum ist den da am ende ein einzelnes Komma?

Motfrager 
Fragesteller
 19.02.2018, 14:04

Da ich das ja nicht in die Dateireinsetzen kann, weil sie sonnst überschrieben wird, hab ich das man direkt unter die einfügung der Datei eingesetzt.

Da kahm allerdings wieder ein Error:

AH01071: Got error 'PHP message: PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /var/www/vhosts/MEINESEITE.com/SUB.MEINESEITE.com/backend/templates/head.inc.php on line 4\n'

Auf Zeile 4 habe ich dein Script eingefügt.

0
oxbox  19.02.2018, 14:22
@Motfrager

Dann poste mal DIE ganze PHP und nicht nur die 4 Zeilen, damit man sieht was du da vor hast .. evtl hab ich dich auch missverstanden.

0
regex9  19.02.2018, 22:29
@Motfrager

Das hängt damit zusammen, dass im obigen Code versucht wird, Array-Indexer via String-Interpolation miteinander zu verbinden. Mit so etwas kommt PHP allerdings nicht klar. Setze entweder geschweifte Klammern um die einzelnen Ausdrücke oder nehme eine klassische String-Konkatenation vor.

a)

"{$default['driver']}:host={$default['host']};dbname={$default['database']}"

b)

$default['driver'].":host=".$default['host'].";dbname=".$default['database']
0
regex9  19.02.2018, 16:13

Die Variable $default befindet sich in einem Klassenkontext und wird somit von außen nicht einfach so aufrufbar sein.

0
regex9  19.02.2018, 22:43
Warum ist den da am ende ein einzelnes Komma?

Das Komma ist das Trennzeichen für aufgeführte Elemente in einem Array-Initializer. Dieses letzte ist zwar unnötig, aber bei manchen Entwicklern aber auch Teil des Programmierstils. So spart sich der Entwickler beim nächsten Anfügen eines Elements Tipparbeit. Da die Datei eh automatisch generiert wird, kann das Komma aber auch egal sein.

1

Probier es mal so:

$db = new DATABASE_CONFIG;
$pdo = new PDO($db->default['driver'] . ":host=" . $db->default['host'] . ";dbname=" . $db->default['database'], $db->default['login'], $db->default['password']);
Motfrager 
Fragesteller
 19.02.2018, 13:58

Wo soll ich das script hinsetzen?

untendrunter?

In die head.inc.php Datei?

obendrüber?

0
Motfrager 
Fragesteller
 19.02.2018, 14:04

Klappt leider nicht...

egal wo ich das hinsetze

0
happyfish2  19.02.2018, 17:20
@Motfrager

Ich kenne deine Dateistruktur nicht, daher weiß ich auch nicht was in deiner head.inc.php steht. Mein Codeschnipsel müsste dahin, wo die Klasse DATABASE_CONFIG bereits bekannt ist, also entweder darunter oder unter das entsprechende include.

0

>>Allerdings bin ich mir ziemlich sicher, dass ich diese Klasse noch nirgendwo eingebunden habe.

Scheinbar schon.

Übrigens ist der Aufbau nicht klassengerecht.

Ein "sauberes" Beispiel:

<?php
 class abc{
  public $daten = array(/*...*/);
 }

 $def = new abc;

 echo $def->daten["driver"];
?>