PDO 连接字符串:最好的方法是什么? [关闭]

问题描述 投票:0回答:1

我想使用 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
]);

?>
php mysql sql pdo mariadb
1个回答
3
投票

这道题并不像看起来那么简单。我写了一个典型的例子, 如何使用 PDO 连接到 MySQL.

所以让我们看看这里有什么可以改进的:

  • charset 可以设置为 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());
}

请注意,如果将此代码放在函数或类的方法中,请不要将数据库凭据作为原始参数发送,而是将它们作为数组发送或在函数内检索它们。否则它们将再次出现在堆栈跟踪中。

© www.soinside.com 2019 - 2024. All rights reserved.