Verbindungen und Verwaltung der Verbindungen - mit PDO

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Verbindungen und Verwaltung der Verbindungen - mit PDO

Postby unleash_it » 27. November 2020 16:19

Moin hallo Commuity

hier eine Frage zu Verbindungen und Verwaltung der Verbindungen - insbes. zur PDO-Basisklasse

vgl. https://www.php.net/manual/de/pdo.connections.php

Verbindungen werden durch das Erstellen von Instanzen der PDO-Basisklasse erzeugt. Es ist unerheblich, welchen Treiber Sie benutzen wollen. Sie benutzen immer den PDO-Klassennamen.
Der Konstruktor erwartet Parameter zur Angabe der Datenbankquelle (auch bekannt als DSN) und optional für Benutzername und Passwort (falls vorhanden).


Beispiel #1 Mit MySQL verbinden

Code: Select all
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>


Wenn es Fehler bei der Verbindung gibt, wird eine Ausnahme vom Typ PDOException geworfen. Sie können die Ausnahme abfangen, wenn Sie sich selbst um die Fehlerbedingung kümmern wollen, oder Sie können es einer globalen Routine zur Ausnahmebehandlung überlassen, die Sie mit set_exception_handler() konfigurieren.

Beispiel #2 Verbindungsfehler behandeln

Code: Select all
?php
try {
   $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
   foreach ($dbh->query('SELECT * from FOO') as $row) {
      print_r($row);
   }
   $dbh = null;
} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}
?>



....also ich geh nochmals einen Schritt zurück zu einem Fehler: beim Installieren einer PHP Anwendung -( Limesurvey) auf einem Server ) der doch ganz stabil läuft und auf dem es im Grunde keine DB-Fehler(Verbindungsfehler) gibt.

Der Fehler:
Code: Select all
 db-connection: SQLSTATE[HY000] [2002] No such file or directory

vgl. die Fehlerbeschreibung: https://forums.limesurvey.org/forum/ins ... ere#208597

Also das bedeutet dass php nicht den mysql.default_socket file finden kann. Ich denke dass ich hier mal ein paar Tests anstellen muss um zu sehen, ob ich zur mysql mittels pdo Verbindung herstellen kann.

Code: Select all
try{
    $dbh = new pdo( 'mysql:host=127.0.0.1:3308;dbname=axpdb',
                    'admin',
                    '1234',
                    array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    die(json_encode(array('outcome' => true)));
}
catch(PDOException $ex){
    die(json_encode(array('outcome' => false, 'message' => 'Unable to connect')));
}



....ist die Frage ob ich hier display errors off gleich noch brauche & das exception-Handling?

Hier noch eine weitere Version:
Code: Select all
$host     = "localhost";//the type of our database, in this case my host machine    - well it is possible to use mysql:host=127.0.0.1:3308;dbname=axpdb',
$user     = "root";   //here we need the Username to use the database
$pass     = "qwerty123xyz";// here the password for that user
$dbname   = "DB";//Name of the corresponding database
$port = "3306";
$charset = 'utf8mb4';

try {
    $connection = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}catch(PDOException $e)
{
  echo $e->getMessage();                         
}


mir oder ohne error-handling .... hier mit:


Code: Select all
<?php
$host     = "localhost";// the type of our database, in this case my host machine    - well it is possible to use mysql:host=127.0.0.1:3308;dbname=axpdb',
$servername = "localhost";
$username = "username";//here we need the Username to use the database
$password = "qwerty123xyz";// here the password for that user
$port = "3306"; //here we need the port
$charset = 'utf8mb4';// the charset is pretty important!

try {
  $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
?>



wie auch hier...:

Code: Select all
$host     = "localhost";// the type of our database, in this case my host machine    - well it is possible to use mysql:host=127.0.0.1:3308;dbname=axpdb',
$servername = "localhost";
$username = "username";//here we need the Username to use the database
$password = "qwerty123xyz";// here the password for that user
$port = "3306"; //here we need the port
$charset = 'utf8mb4';// the charset is pretty important!

try {
    $connection = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}catch(PDOException $e)
{
  echo $e->getMessage();                         
}



für ein Array mit PDO hier die einzelnen Teile:

PDO::ATTR_ERRMODE - wichtig - immer auf PDO::ERRMODE_EXCEPTION. Es soll immer ein Error rauswerfen wenns nicht geklappt hat wenn es zu einem Fehler kommt mit mysql_query()
PDO::ATTR_EMULATE_PREPARES - diese Option zeigt ob PDO entweder einen emulation mode verwendet oder eben nicht.
PDO::setAttribute() method, turned off by default als eine Verbindungsoption
PDO::ATTR_DEFAULT_FETCH_MODE - Eine Komfort-Option. Obwohl die fetch method immer im fetch function call (wie etwa hier $row = $stmt->fetch(PDO::FETCH_ASSOC);) läuft - sind dies die beliebteste Fetch-Modes:
PDO::FETCH_ASSOC and PDO::FETCH_OBJ welches PDO veranlasset die Ergebnisse als Reihen zu holen - als assozotatives array oder als ein Objket


Vorhaben: ich werde jetzt mit dem Script testen wie die Verbindung via PDO zur DB aufgenommen wird.
Interessen: Bikes & steel frames: Linux & SBC https://www.allaboutcircuits.com :: die neuen Knowledge-Base: AFFiNE: There can be more than Notion and Miro. auf affine.pro :: WordPress Entwicklung - sic: make.wordpress.org/core/
User avatar
unleash_it
 
Posts: 754
Joined: 10. December 2011 18:32
Operating System: linux opensuse 12.1

Re: Verbindungen und Verwaltung der Verbindungen - mit PDO

Postby unleash_it » 27. November 2020 20:57

also - es geht um diesen Thread hier -

https://forums.limesurvey.org/forum/ins ... ere#208597

da denke ich. ist das unbed. meine Servereinstellung oder kann das ggf auch noch daran liegen dass ich ggf. in dem LimeSurvey noch was besser anpassen sollte - also ggf. nach einem Workaround in dem LimeSurvey-Script suchen welcher mir erlaubt um diese dämliche (sorry) Installationsroutine zu kommen!?

ist da ggf. eine Möglichkeit. Das Interessante ist - alles was auf dem Server noch läuft - (z.B. Wordpress ) lässt sich einfach installieren - da ist es nie ein Problem die Verbindung zur DB herzustellen... !

Nur bei dem Limesurvey hab ich diese Socket_Probleme.
Interessen: Bikes & steel frames: Linux & SBC https://www.allaboutcircuits.com :: die neuen Knowledge-Base: AFFiNE: There can be more than Notion and Miro. auf affine.pro :: WordPress Entwicklung - sic: make.wordpress.org/core/
User avatar
unleash_it
 
Posts: 754
Joined: 10. December 2011 18:32
Operating System: linux opensuse 12.1

Re: Verbindungen und Verwaltung der Verbindungen - mit PDO

Postby Nobbie » 28. November 2020 14:10

Ich habe mal das neueste Xampp für Linux installiert (Xampp 7.4.12), habe limesurvey 3.25.1 heruntergeladen und unter htdocs/limesurvey installiert, habe ein paar Verzeichnis Rechte (das ist typisch für Linux) anpassen müssen (u.a. für tmp und upload Verzeichnis) und habe dann einfach mit http://localhost/limesurvey die Installation gestartet. Habe als PDO Treiber MySql ausgewählt, habe "root" ohne Passwort (die Xampp Defaulteinstellung) als Datenbank User angegeben, habe "limesurvey" als Datenbankname angegeben, gibt es natürlich nicht, wurde angemault aber mit dem Angebot, dass die Datenbank erstellt werden kann, habe ich akzeptiert und jetzt bin ich durch.

Ich kann mich als mein gewählten admin Account mit dem von mir festgelegten Passwort einloggen, jetzt werde ich nur noch angemault, weil das keine sichere Verbindung ist (https), aber das mache ich jetzt nicht mehr, ich brauche das nicht. Läuft alles einwandfrei. Der Datenbank Konfigurationsstring in config.php wird offensichtlich ad hoc von der Installationsroutine erstellt, bei mir steht da folgerichtig dieses:

Code: Select all
         'connectionString' => 'mysql:host=localhost;port=3306;dbname=limesurvey;',


Alles ist gut.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Verbindungen und Verwaltung der Verbindungen - mit PDO

Postby unleash_it » 13. December 2020 14:31

hallo Nobbi,

vielen Dank für deine Antwort - das ist hilfreich.

Also - glaub es oder nicht - ich musst lediglich Localhost austauschen gegen
Code: Select all
/var/run/mysql/mysql.sock


Also - der DB-Socket ist hier die Frage gewesen. Gleich nach dieser Korrektur ists problemlos gewesen LimeSurvey zu installieren.

Nochmals vielen Dank fürs Ausprobieren und hier deinen Report.

vg Leash
Interessen: Bikes & steel frames: Linux & SBC https://www.allaboutcircuits.com :: die neuen Knowledge-Base: AFFiNE: There can be more than Notion and Miro. auf affine.pro :: WordPress Entwicklung - sic: make.wordpress.org/core/
User avatar
unleash_it
 
Posts: 754
Joined: 10. December 2011 18:32
Operating System: linux opensuse 12.1

Re: Verbindungen und Verwaltung der Verbindungen - mit PDO

Postby Nobbie » 13. December 2020 17:49

Das spricht sehr dafür, dass Du statt Xampps MySQL eine MySQL Installation Deiner Linux Distribution benutzt. Denn Xampp verläßt nicht den Raum /opt/lampp, ein Verzeichnis /var/run/... gibt es unter Xampp nicht und wird nicht von Xampp angelegt und auch nicht benötigt. Das ist das typische Verzeichnis für systeminterne Programme.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Verbindungen und Verwaltung der Verbindungen - mit PDO

Postby unleash_it » 13. December 2020 20:17

Moin - danke fürs rasche Antworten. :)

Das ist richtig - von A bis Z. Ich hab das Problem auch nicht auf einem Xampp gehabt - sondern auf einem Server (einer Linux-Distribution).
Nobbie wrote:Das spricht sehr dafür, dass Du statt Xampps MySQL eine MySQL Installation Deiner Linux Distribution benutzt. Denn Xampp verläßt nicht den Raum /opt/lampp, ein Verzeichnis /var/run/... gibt es unter Xampp nicht und wird nicht von Xampp angelegt und auch nicht benötigt. Das ist das typische Verzeichnis für systeminterne Programme.


Danke fürs nochmalige Antworten und deine Mühle die du hattest mit Lime.

Sorry nochmals dass ich Euch mit diesem Server-Thema hier ins XAMPP-reingekommen bin. Schon mehrfach hab ich hier so super Antworten bekommen dass ich Serverdinge lösen konnte.

Bin sehr beeindruckt von Eurem Forum.

Macht weiter so - es ist ein toller Platz für alle Fragen rund um Server und Co!
VG leash :D
Interessen: Bikes & steel frames: Linux & SBC https://www.allaboutcircuits.com :: die neuen Knowledge-Base: AFFiNE: There can be more than Notion and Miro. auf affine.pro :: WordPress Entwicklung - sic: make.wordpress.org/core/
User avatar
unleash_it
 
Posts: 754
Joined: 10. December 2011 18:32
Operating System: linux opensuse 12.1


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 8 guests