如何在PHP PDO中针对guest/admin用户执行CRUD并切换数据库连接?
关于PDO多用户数据库连接与权限切换的疑问
我跟着一篇西班牙语教程实现了Android端查询MySQL数据库的功能,采用PHP Web服务(PDO),目前查询功能正常,但全程使用root用户连接数据库。
需求说明
- 无需登录即可查询数据:使用数据库中创建的
guest用户替代root(仅赋予查询权限) - 插入、编辑或删除数据需用户登录:登录成功后使用
admin用户执行操作(拥有完整CRUD权限)
当前相关代码
mysql_login.php
<?php /** * Provee las constantes para conectarse a la base de datos * Mysql. */ define("HOSTNAME", "localhost");// Nombre del host define("DATABASE", "i_wish"); // Nombre de la base de datos define("USERNAME", "root"); // Nombre del usuario define("PASSWORD", ""); // Nombre de la constraseña ?>
Database.php
<?php /** * Clase que envuelve una instancia de la clase PDO * para el manejo de la base de datos */ require_once 'mysql_login.php'; class Database { /** * Única instancia de la clase */ private static $db = null; /** * Instancia de PDO */ private static $pdo; final private function __construct() { try { // Crear nueva conexión PDO self::getDb(); } catch (PDOException $e) { // Manejo de excepciones } } /** * Retorna en la única instancia de la clase * @return Database|null */ public static function getInstance() { if (self::$db === null) { self::$db = new self(); } return self::$db; } /** * Crear una nueva conexión PDO basada * en los datos de conexión * @return PDO Objeto PDO */ public function getDb() { if (self::$pdo == null) { self::$pdo = new PDO( 'mysql:dbname=' . DATABASE . ';host=' . HOSTNAME . ';port:63343;', USERNAME, PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") ); // Habilitar excepciones self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } return self::$pdo; } /** * Evita la clonación del objeto */ final protected function __clone() { } function _destructor() { self::$pdo = null; } } ?>
我已经找到登录验证的示例,但不清楚验证通过后如何使用对应用户执行CRUD操作,有以下具体疑问:
疑问列表
- 若将
mysql_login.php配置为guest用户的凭据,登录验证时需要查询用户信息(需访问用户表),该如何实现?是否需要另一套带root凭据的数据库连接文件?还是可从APP端传递凭据参数? - 用户登录成功后,如何切换为
admin用户执行CRUD操作?
内容的提问来源于stack exchange,提问作者xerez
相关产品推荐
相关产品推荐

