Speichern PDO Details in der php.ini
Frage
Nach der PDO Dokumentation , können Sie Datenbank-Login speichern in php.ini Details, weg von der pHP-Datei (Beispiel 3). Aber es erklärt nicht, wie Benutzername und Passwort zu speichern, nur die Datenbank und Host. Wie würden Sie das tun?
Dies ist die Methode in der Dokumentation verwendet:
[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"
Ich habe versucht, den Benutzernamen und das Kennwort an den Host hinzufügen, aber es mag nicht: zwischen dem Benutzernamen und Passwort, und es erkennt nicht nur eine Adresse mit nur einem Benutzernamen als reale Adresse:
[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=username:password@localhost"
Ich habe auch versucht, den Benutzernamen und das Passwort als separate Argumente setzen, aber es funktioniert not.s
[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost;username:username;password:secret"
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost;uid:username;pwd:secret"
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost;UID:username;PWD:secret"
Lösung
Nach der Dokumentation, ist dies nicht möglich. Und wahrscheinlich nicht wollte. Wenn Sie an der PDO __construct()
Methode suchen, dauert es drei Argumente: a. DSN (das ist ein Name für eine pdo.dsn.name
in der php.ini definiert sein kann), einen Benutzernamen und ein Passwort
Andere Tipps
Sie können speichern Sie die DB-Benutzername und Passwort in einer Umgebungsvariablen, die dann innerhalb des PHP-Skript in der $_ENV
superglobal zur Verfügung.
AFIACT, man kann nicht eine Umgebungsvariable aus der php.ini gesetzt, aber Sie können es die Apache-Konfiguration festgelegt, in einer .htaccess-Datei enthalten. Z.
SetEnv mysql_username dbuser
SetEnv mysql_password dbpass
Dann in Ihrem PHP können Sie:
$db = new PDO('mydb',$_ENV['mysql_username'],$_ENV['mysql_password']);
Sie können auch die DSN als Umgebungsvariable setzen könnten sie alle zusammen zu halten.