Cómo resolver ERROR PDO en SQLSTATE[HY000] [1524] Plugin is not loaded

max-jacob -  
 max-jacob -
Hola,

Tengo la costumbre de programar con Wamp, pero desde que migro a Easy PHP con los siguientes detalles:

Apache 2.4.25 x86 - PHP 5.6.30 x86 Puerto: 80
MySQL 5.7.17 x86 Puerto: 3306

Ahora, cuando arranco mi aplicación, aparece la página de inicio de sesión, pero al intentar una conexión con un login correcto, obtengo el siguiente mensaje de error:

ERREUR PDO dans SQLSTATE[HY000] [1524] Plugin '*4F57BFFF7B9480A7D39BBEB8618276A816FD1BFA' is not loaded

Sinceramente, no sé qué hacer. Soy Windows 10 de 64 bits.

Sin embargo, mi conexión utiliza PDO pero todavía uso Mysqli en mi código; no sé si ese es el problema. Aunque ese sea el caso, WampServer lo gestionaba bien.

Gracias de antemano por tu ayuda.

5 respuestas

  1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     
    Bonjour


    ma connexion utilise PDO mais j'utilise toujours Mysqli


    What ??

    Si tu utilises Mysqli... Ta connexion doit être en mysqli !!

    --
    Cordialement,
    Jordane
    0
  2. max-jacob
     
    Hola y gracias por tu ayuda @Jordan 45 y yg_be,

    He mezclado código Mysqli con Código PDO en mi app que funcionaba bien localmente, pero es en el servidor de producción donde tuve todos los problemas del mundo. A veces funciona bien, a veces aparecen errores sin explicación.

    Tus observaciones son bienvenidas

    el código fuente de mi página de inicio de sesión es:

    <?php
    ob_start();
    session_start();
    //session_destroy();

    if(!empty($_POST)){
    $maVariable = $_POST;
    $_SESSION['agentNomUtilisateur'] = $_POST['agentNomUtilisateur'];

    //Conexión a la Base de Datos
    require_once('inc/db.php');

    $usernameVerification = "SELECT * FROM agent WHERE agentNomUtilisateur = '".$maVariable['agentNomUtilisateur']."' ";
    $requete = mysqli_query($mysqli, $usernameVerification);

    if (mysqli_num_rows($requete) >=1){

    while($row = mysqli_fetch_assoc($requete)){

    //Descifrado de las contraseñas obtenidas de la base de datos
    if(password_verify($maVariable['agentMotDePasse'], $row['agentMotDePasse'])){
    if($row['agentStatus'] == 0){
    session_destroy();
    die("<br><br><br><br><br>
    <center><img class='mb-4' src='img/logo.png'>
    <br><br><br>
    <h2>Désolé!<br>Votre compte est désactivé par l'administration.<br>
    Si vous pensez qu'il s'agit d'une erreur, veuiller contactez un administrateur(trice).</h2>
    <a href='index.php'>Retour à la page de connexion</center></a>");
    }
    $_SESSION['utilisateur'] = '';
    $_SESSION['roleuser']= $row['roleId'];

    header('Location:app/index.php');

    }else{
    $error_login = "Mot de passe incorrecte";
    }
    }

    } else {
    $error_login = "Nom d'utilisateur incorrecte";
    }

    mysqli_close($mysqli);
    }
    ?>

    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="robots" content="noindex,nofollow" />
    <link rel="icon" href="img/favicon.png">

    <title>My App</title>
    <meta http-equiv="refresh" content="600;URL=http://mywebapp.com">

    <!-- Bootstrap core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="css/signin.css" rel="stylesheet">
    </head>

    <body class="text-center">

    <form class="form-signin" action="" method="post" name="connect_form">

    <img class="mb-4" src="img/logo.png" alt="" >
    <?php
    if (isset($error_login)){
    echo "<p style='color:red'>$error_login</p>";
    } ?>
    <label for="inputEmail" class="sr-only">Utilisateur</label>
    <input type="text" id="agentNomUtilisateur" class="form-control" placeholder="Nom d'Utilisateur" name="agentNomUtilisateur" required autofocus>
    <label for="inputPassword" class="sr-only">Mot de passe</label>
    <input type="password" id="agentMotDePasse" class="form-control" placeholder="Mot de passe" name="agentMotDePasse" required>

    <button class="btn btn-lg btn-primary btn-block" type="submit">Connexion</button>
    <p class="mt-5 mb-3 text-muted">© 2017-2020 La Poste Centrafricaine</p>
    </form>
    </body>
    </html>



    A continuación ahora el código de la página privada que se encuentra tras un login correcto
    Todas tus observaciones son bienvenidas.



    <?php
    ob_start();
    session_start();

    if(!isset($_SESSION['agentNomUtilisateur']))
    {
    header("location:../disconnected.php"); // redirección
    exit; // fin del script
    }
    //La sesión está abierta podemos mostrar la página
    require_once('../inc/db.php');//Conexión a la base de datos

    //Consulta para mostrar el nombre del Usuario
    $agentNomUtilisateur = $_SESSION['agentNomUtilisateur'];
    $ps = $pdo -> prepare("SELECT * FROM agent WHERE agentNomUtilisateur = ?");
    $params=array($agentNomUtilisateur);
    $ps -> execute($params);
    $agent=$ps->fetch();

    //Redireccionar al MENU administrador
    if($agent['agentNiveauAcces']==1){
    header("location:../app/admin.php"); // redirección
    exit; // fin del script
    }
    ?>

    <!doctype html>
    <html lang="fr">
    <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="robots" content="noindex,nofollow" />
    <link rel="icon" href="../img/favicon.png">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="../css/bootstrap.css">
    <link rel="stylesheet" href="../css/custom.css">

    <title>My App</title>
    <?php header("refresh:600;url=../app/d.php"); ?>
    </head>
    <body>
    <?php
    //Importation du menu
    require_once('../inc/menu.php');
    ?>

    0
    1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      ¿Y qué contiene tu página db.php?
      0
  3. max-jacob
     

    <?php
    //Conexión a la base de datos mediante PDO
    try{
    $strConnection = 'mysql:host=localhost;dbname=MonDatabaseName';
    $pdo = new PDO ($strConnection, 'MonDatabaseUsername', 'MonDatabasePassword');

    // Activación de errores de PDO
    // $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // modo de fetch por defecto : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
    // $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    }
    catch (PDOException $e){
    $msg = 'ERREUR PDO dans ' . $e->getMessage();
    die ($msg);
    }
    ?>

    Voilà, c’est typiquement le code.
    0
    1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      El problema es, como te decía, no mezclar PDO y Mysqli.

      En tu primer script, usas mysqli .... mientras que cargas el fighcier db.php que, por su parte, realiza la conexión en PDO.

      Ya sería necesario probar si el módulo PDO está presente ( y activado ) en tu servidor.
      Para ello, puedes crear un archivo PHP en la raíz de tu sitio ( llamado por ejemplo checkPdo.php )
      dentro
       <?php if ( extension_loaded('pdo') ) { echo " PDO está ahí !"; echo " Puedes reemplazar tus códigos mysqli por PDO"; } else { echo "No hay PDO ... usa únicamente mysqli "; } 

      Luego lo ejecutas.
      0
  4. max-jacob
     
    Resultado: ¡PDO está ahí! Puedes reemplazar tus códigos mysqli por PDO.

    OK, voy a intentar reemplazar Mysqli por PDO.
    0