PHP PDO 新连接 : What effect does selecting the database have?

标签 php mysql pdo

与 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/

相关文章:

php - CodeIgniter,从模型到 View 显示 MySQL 查询,最佳实践

javascript - 如何在 NodeJS 中访问 SQL 请求的结果?

MySQL 存储函数 : CONTAINS SQL or NO SQL?

php - 开箱即用的 Eclipse PDT(PHP 开发工具)不能调试 PHP,为什么?

php - Facebook 取消对我的应用程序的授权

php - 找到 php 5.6 文件夹

mysql - 如何在 MySQL JSON_CONTAINS 中使用 PDO bindParam?

php - 处理数百万行时,PDO DELETE异常慢

php - PDOException 错误 PHP SQL "Firstname Cannot be Null"

php - Laravel 5.1 如何使用迁移创建 MySQL 存储过程