【问题标题】:Storing PDO details in php.ini在 php.ini 中存储 PDO 详细信息
【发布时间】:2009-10-30 13:58:38
【问题描述】:

根据PDO documentation,您可以将数据库登录详细信息存储在php.ini 中,远离php 文件(示例3)。但它没有说明如何存储用户名和密码,只说明数据库和主机。你会怎么做?

这是文档中使用的方法:

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

我已经尝试将用户名和密码添加到主机,但它不喜欢:在用户名和密码之间,并且它无法识别只有用户名的地址作为真实地址:

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

我也尝试将用户名和密码作为单独的参数,但它没有。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"

【问题讨论】:

    标签: php database pdo


    【解决方案1】:

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

    【讨论】:

    • 实际上,这并不完全正确——这完全取决于 PDO 驱动程序。例如,在 pgsql 中,定义用户并传入 DSN 就可以正常工作(您可以传递一个空字符串作为其他两个参数)。来自php.net/pdo-pgsql.connection 的文档: user 连接的用户名。如果在 DSN 中指定用户名,PDO 将忽略 PDO 构造函数中用户名参数的值。密码 用于连接的用户密码。如果在 DSN 中指定密码,PDO 会忽略 PDO 构造函数中密码参数的值。
    【解决方案2】:

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

    AFIACT,您无法从 php.ini 设置环境变量,但您可以将其设置为 apache 配置,包括在 .htaccess 文件中。例如

    SetEnv mysql_username dbuser
    SetEnv mysql_password dbpass
    

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

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

    您也可以将 DSN 作为一个环境变量来保持它们在一起。

    【讨论】:

    • 请不要这样做。环境变量出现在 phpinfo() 中。将 PDO 凭据存储在 .ini 文件中的托管文件夹之外会更安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2015-07-22
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多