Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PDO PHP在Postgresql数据库中设置与模式的连接_Php_Postgresql_Pdo - Fatal编程技术网

如何使用PDO PHP在Postgresql数据库中设置与模式的连接

如何使用PDO PHP在Postgresql数据库中设置与模式的连接,php,postgresql,pdo,Php,Postgresql,Pdo,如果我有一个具有多个模式的Postgresql数据库,并且我想使用PDO将我的Web应用程序连接到数据库的一个shemas(默认情况下不是公共模式),那么最理想的方法是什么 我当前与DB的连接如下所示: public static function Conecction(){ $dbname = "start"; $host = "localhost"; $username = "user"; $password = "123";

如果我有一个具有多个模式的Postgresql数据库,并且我想使用PDO将我的Web应用程序连接到数据库的一个shemas(默认情况下不是公共模式),那么最理想的方法是什么

我当前与DB的连接如下所示:

public static function Conecction(){

        $dbname = "start";
        $host = "localhost";
        $username = "user";
        $password = "123";
        return new PDO("pgsql:dbname=$dbname;host=$host", $username, $password);
    }
但在这里,我只是指定了数据库的名称,而不是在数据库中使用模式


非常感谢

要设置默认模式,必须执行如下查询:

$conn = Foo::Conecction();
$conn->exec('SET search_path TO yourschema');
或者,如果您想以更用户特定的方式进行此操作:

$conn->exec('ALTER USER user SET search_path TO yourschema');
附带说明:请不要这样创建PDO实例(作为静态方法的返回值)
PDO
提供了一个全新的API。您不允许调用方确定连接到哪个数据库,而是硬编码凭据。以任何标准来看,这都被认为是不好的做法。考虑将连接传递到您需要的任何地方,或者-如果您坚持-创建一种方法,至少需要调用方自己通过db凭据。< /P> 我还建议您在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
    ]
);
查看其他并相应地使用


最后一件事:不久前
PDO
在解析
localhost
主机名时偶尔会遇到问题。我怀疑这个bug已经被修复了,但为了防止它突然出现(甚至:还没有被修复),我建议您尽可能使用ip地址。如果您已经知道IP,那么不必麻烦DNS服务器解析一个字符串,您知道该字符串将解析为
127.0.0.1

WOW Thx!还有两件事,1:如何设置模式的路径。2:你能给我举一个使用PDO设置DB连接的正确方法的例子吗?谢谢@Zgrizly_7:不知道你说1是什么意思
ALTER USER username SET search\u path TO schema1、schema2、schema3
ALTER ROLL some\u ROLL角色集search\u path
甚至
ALTER DATABASE start SET search\u path TO schema1、schema2
在PG服务器上直接允许您这样做哦,太棒了!我不知道!:)埃利亚斯·范奥特格姆!我得到了它!我真的是个新手PDO@zgrizzly_7当前位置这一切都在网络中(诚然,用户不太友好)。至于你的第二个问题:最后一个片段是如何创建连接。这是创建PDO实例的一种非常标准的方法。我不会用一个静态方法来包装它,它会盲目地返回新的连接,但这取决于您如何处理可能的重复连接