我想使用 php/pdo 制作一个后端应用程序。我发现了很多不同的方法来处理 PDO 连接字符串。我想知道使用 pdo 执行连接字符串的最佳方法是什么。这是执行连接字符串的最佳方法还是我应该使用其他代码。欢迎任何建议或调整!
这就是我现在所拥有的:
<?php
$host = "localhost";
$db = "phpcrud";
$username = "root";
$password = "";
$conn = new PDO("mysql:host=$host;dbname=$db;charset=UTF8", $username, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
]);
?>
最佳答案
这个问题并不像看上去那么简单。我写了一个规范的例子, How to connect to MySQL using PDO 。
让我们看看这里有哪些可以改进的地方:
- 字符集可以设置为utf8mb4(现在这是MySQL的推荐标准,因为它支持完整的UTF-8字符集,而
utf8
只是有限的)子集) - 模拟模式最好关闭(为了方便,有些人会说更好的安全性)
- 最好捕获并重新抛出连接错误,以便从堆栈跟踪中隐藏数据库凭据 - 以获得更好的安全性
- PDO 类名最好以全局命名空间为前缀,这样代码就能够在命名空间环境中工作。
所以给你:
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::ATTR_EMULATE_PREPARES => false,
];
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new \PDO($dsn, $username, $password, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
请注意,如果将此代码放入函数或类的方法中,请勿将数据库凭据作为原始参数发送,而是将它们作为数组发送或在函数内检索它们。否则它们将再次出现在堆栈跟踪中。
关于php - PDO 连接字符串 : What is the best way to do it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56602668/