Cómo resolver ERROR PDO en SQLSTATE[HY000] [1524] Plugin is not loaded
max-jacob
-
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.
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
-
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención Ambassadeur 1 588
Hola, tal vez podrías mostrarnos tu código, sin olvidar usar esto: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code -
Bonjour
ma connexion utilise PDO mais j'utilise toujours Mysqli
What ??
Si tu utilises Mysqli... Ta connexion doit être en mysqli !!
--
Cordialement,
Jordane -
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');
?>
-
<?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.-
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.
-
-
Resultado: ¡PDO está ahí! Puedes reemplazar tus códigos mysqli por PDO.
OK, voy a intentar reemplazar Mysqli por PDO.