与 PDO 建立新连接时:
$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
看来您必须在 DB_DSN 中指定一个数据库,例如
mysql:dbname=mydatabase
但是,我刚刚发现这并不限制使用此连接到此数据库的后续查询。可以使用 DB_USERNAME 具有权限的任何其他数据库。它所做的只是指定一个默认值。
它告诉我,有时查询不够具体,因此存在访问错误数据库中的表的风险。
我认为我应该创建一个虚拟数据库,建立与该数据库的所有连接,从而强制所有查询显式包含数据库名称。
或者:有没有办法使连接独占给定的数据库?
这里的最佳实践是什么?
最佳答案
选项:
- 在查询中使用数据库名称
SELECT * FROM dbname.tblname
- 创建一个 sql 映射器类,在每次查询之前选择数据库
new SQLMapper($databasename,$connection);
&mysql_select_db($this->dbname,$this->con)
在 query() 方法中 - 使用
DOCTRINE
或类似的东西,他们会帮你处理 - 仅授予 dbuser 对一个数据库的访问权限(强制开发人员使用正确的实例且不更改数据库)
在特定情况下使用有用的东西,没有最好的解决方案。
主要是关于您对应用程序中的代码拥有多少控制权。
如果遵守规则,那么一切都应该没问题。
关于PHP PDO 新连接 : What effect does selecting the database have?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40690475/