You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:14:54