tarifa
Lieutenant
- Registriert
- März 2020
- Beiträge
- 617
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
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
....also ich geh nochmals einen Schritt zurück zu einem Fehler: beim Installieren einer PHP Anwendung -( https://www.Limesurvey.org) auf einem Server ) der doch ganz stabil läuft und auf dem es im Grunde keine DB-Fehler(Verbindungsfehler) gibt.
Der Fehler:
vgl. die Fehlerbeschreibung: https://forums.limesurvey.org/forum...-during-installprocess-what-to-do-here#208597
Hintergrund: 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.
....ist die Frage ob ich hier display errors off gleich noch brauche & das exception-Handling?
Hier noch eine weitere Version:
mir oder ohne error-handling .... hier mit:
wie auch hier...:
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.
hier eine Frage zu Verbindungen und Verwaltung der Verbindungen - insbes. zur PDO-Basisklasse
vgl. https://www.php.net/manual/de/pdo.connections.php
Beispiel #1 Mit MySQL verbindenVerbindungen 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).
Code:
<?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:
?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 -( https://www.Limesurvey.org) auf einem Server ) der doch ganz stabil läuft und auf dem es im Grunde keine DB-Fehler(Verbindungsfehler) gibt.
Der Fehler:
Code:
db-connection: SQLSTATE[HY000] [2002] No such file or directory
Hintergrund: 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:
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:
$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:
<?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:
$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.
Zuletzt bearbeitet: