我正在使用PHP的PDO和MySQL创建一个web应用程序。我希望将web应用程序置于“演示”模式。这意味着所有写操作(更新、插入、删除)都将被禁用,并且适用的操作将继续进行,不会出现任何错误。为了参数起见,如果$_SESSION['demo_mode']=1,则应用程序处于演示模式。如果不在每个write语句周围加上条件语句,如何才能做到这一点。
$dbh->exec("INSERT INTO t1(c1, c2) VALUES ('v1', 'v2')");
$dbh->lastInsertId();
$q=$dbh->query("SELECT c1 FROM t2 WHERE c2=123");
$v=$q->fetchColumn();
最佳答案
您可以修改应用程序连接的用户的权限,以便它只获得SELECT
和类似的权限。
这是您可以授予用户的comprehensive list of individual rights。
示例(当然,为了适应您的需要):
REVOKE ALL PRIVILEGES ON yourdatabase.* FROM 'application_user'@'host';
GRANT SELECT ON yourdatabase.* TO 'application_user'@'host';
显然,当应用程序试图编写任何内容时,这将产生错误。如果您打算将此应用程序用于演示,您的应用程序应该准备好优雅地失败;)
关于php - 全局禁用所有MySQL写操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18105414/