【问题标题】:how to set the connection with a schema in a Postgresql DB with PDO PHP如何使用 PDO PHP 在 Postgresql DB 中设置与模式的连接
【发布时间】:2016-04-08 01:01:29
【问题描述】:

如果我有一个带有多个架构的 Postgresql 数据库,并且我想将我的 Web 应用程序设置为使用 PDO 的数据库的其中一个 shemas(默认情况下不是公共架构)的连接,那么最佳方式是什么?

我目前与数据库的连接是这样的:

public static function Conecction(){

        $dbname = "start";
        $host = "localhost";
        $username = "user";
        $password = "123";
        return new PDO("pgsql:dbname=$dbname;host=$host", $username, $password);
    }

但这里我只是指定了数据库的名称,而不是数据库内部的架构

非常感谢!

【问题讨论】:

标签: php postgresql pdo


【解决方案1】:

要设置默认架构,您必须执行如下查询:

$conn = Foo::Conecction();
$conn->exec('SET search_path TO yourschema');

或者,如果您想以更针对用户的方式进行:

$conn->exec('ALTER USER user SET search_path TO yourschema');

附带说明:请不要这样创建 PDO 实例(作为静态方法的返回值)。 PDO 提供开箱即用的干净 API。您不允许调用者确定要连接的数据库,而是对凭据进行硬编码。从任何标准来看,这都被认为是不好的做法。考虑将连接传递到您需要的任何地方,或者 - 如果您坚持 - 创建一个至少需要调用者自己传递数据库凭据的方法。

我还建议您在 DSN 字符串中包含排序规则,并可能设置一些属性以使调试时更轻松:

$pdo = new PDO(
    "pgsql:dbname=$dbname;host=$host;port=5432;charset=utf8",
    $user,
    $pass,
    [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,//set PDO to throw exceptions on error
        PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,//NULL values are returned as PHP null's
    ]
);

查看其他attributes 并相应使用。

最后一件事: 前段时间PDO 有时会在解析localhost 主机名时遇到问题。我怀疑这个错误已经修复了,但以防万一它突然出现(甚至:尚未修复),我建议您尽可能使用 IP 地址。如果您知道 IP,那么不必打扰 DNS 服务器解析一个您知道无论如何都会解析为 127.0.0.1 的字符串。

【讨论】:

  • 哇,谢谢!还有两件事,1:我如何设置我的模式的路径。 2:您能否分享一个使用 PDO 设置与数据库连接的正确方法的示例?谢了!
  • @zgrizzly_7: 不知道 1. 是什么意思。ALTER USER username SET search_path TO schema1, schema2, schema3ALTER ROLL some_role SET search_path 甚至 PG 服务器上的 ALTER DATABASE start SET search_path TO schema1,schema2 直接允许你这样做
  • 哦,超级!我不知道这个! :)
  • 感谢 Elias Van Ootegem!我得到了它!我真的是使用 PDO 的新手
  • @zgrizzly_7:都在documentation 中(诚然不太友好)。至于你的第二个问题:最后一个 sn-p 是我如何创建连接。这是创建 PDO 实例的一种非常标准的方法。我不会将它包装在一个盲目地返回新连接的静态方法中,但这取决于你如何处理它
猜你喜欢
  • 2015-08-14
  • 2015-08-04
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 2018-09-01
  • 2011-10-21
相关资源
最近更新 更多