PHP PDO新连接:选择数据库有什么影响?

时间:2016-11-19 07:46:05

标签: php mysql pdo

与PDO建立新连接时:

$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );

您似乎必须在DB_DSN中指定数据库,例如

mysql:dbname=mydatabase

但我发现这并不会限制使用此连接的后续查询仅限于此数据库。可以使用DB_USERNAME具有权限的任何其他数据库。它似乎只是指定一个默认值。

它告诉我,有时候,查询不够具体,因此存在访问错误数据库中的表的风险。

我在想我应该创建一个虚拟数据库,建立与该数据库的所有连接,从而强制所有查询明确包含数据库名称。

或者:有没有办法让连接专用于给定的数据库?

这里的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

选项:

  • 在查询SELECT * FROM dbname.tblname
  • 中使用数据库名称
  • 创建一个sql映射器类,在每个查询new SQLMapper($databasename,$connection);之前选择数据库。 query()方法中的mysql_select_db($this->dbname,$this->con)
  • 使用DOCTRINE或类似的东西,他们会为你处理
  • 给dbuser只访问一个数据库(强制devs使用正确的实例& no db change)

在特定情况下使用有用的东西,没有最佳解决方案。

主要是关于你的应用程序中代码的控制程度。

如果遵循规则,那么一切都应该没问题。