有两种方法可以连接到MySQL / MariaDB服务器,具体取决于您的基础结构。
$dsn = 'mysql:dbname=demo;host=server;port=3306;charset=utf8'; $connection = new \PDO($dsn, $username, $password); // 引发SQL错误时引发异常 $connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); // 防止模仿准备好的语句 $connection->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
由于PDO被设计为与旧的MySQL服务器版本(不支持预准备语句)兼容,因此您必须显式禁用该仿真。否则,您将失去通常通过使用预备语句授予的额外的预防注射利益。
您必须记住的另一个设计折衷方案是默认的错误处理行为。如果没有其他配置,PDO将不显示任何SQL错误指示。
强烈建议将其设置为“异常模式”,因为在编写持久性抽象时(例如:在违反UNIQUE约束时有异常),这会为您提供更多功能。
$dsn = 'mysql:unix_socket=/tmp/mysql.sock;dbname=demo;charset=utf8'; $connection = new \PDO($dsn, $username, $password); // 引发SQL错误时引发异常 $connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); // 防止模仿准备好的语句 $connection->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
在类似Unix的系统上,如果主机名是'localhost',则通过域套接字建立与服务器的连接。