如何使用PDO PHP在Postgresql数据库中设置与模式的连接
如果我有一个具有多个模式的Postgresql数据库,并且我想使用PDO将我的Web应用程序连接到数据库的一个shemas(默认情况下不是公共模式),那么最理想的方法是什么 我当前与DB的连接如下所示:如何使用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";
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实例的一种非常标准的方法。我不会用一个静态方法来包装它,它会盲目地返回新的连接,但这取决于您如何处理可能的重复连接