按照 PDO文档,可以存储数据库登录在php.ini细节,远离PHP文件(实施例3)。但它没有解释如何存储用户名和密码,只有数据库和主机。你会怎么做?

这是在文档中所使用的方法:

[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"

我已经尝试添加到主机的用户名和密码,但它不喜欢:用户名和密码之间,它不只有一个用户名的真实地址识别地址:

[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=username:password@localhost"

我也试图把作为独立参数,用户名和密码,但它确实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"
有帮助吗?

解决方案

根据该文档,这是不可能的。而且很可能不想要的。如果你看一下PDO __construct()方法,它有3个参数:一个DSN(它可以是一个名称,在php.ini定义的pdo.dsn.name),用户名和密码

其他提示

可以存储在环境变量中,这是在随后的超全局$_ENV PHP脚本内可用的DB的用户名和密码。

AFIACT,则不能设置从php.ini中的环境变量,但是可以将其设置Apache的配置,包括在一个.htaccess文件。 E.g。

SetEnv mysql_username dbuser
SetEnv mysql_password dbpass

然后在你的PHP你可以使用:

$db = new PDO('mydb',$_ENV['mysql_username'],$_ENV['mysql_password']);

您也可以把DSN为环境变量,以保持它一起。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top