这个问题并不像看起来那么容易。我写了一个规范的示例,
如何使用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());}请注意,如果将此代码放在函数或类的方法中,请勿将数据库凭据作为原始参数发送,而应将它们作为数组发送或在函数内部检索它们。否则,它们将再次出现在堆栈跟踪中。



