mysqli::query(): No se pudo obtener mysqli

4 minutos de lectura

mysqliquery No se pudo obtener mysqli
codificaciónManiac

Advertencia: mysqli::query(): No se pudo obtener mysqli en C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\data\localweb\my portable files\class_EventCalendar.php en la línea 43

El siguiente es mi archivo de conexión:

<?php
if(!isset($_SESSION)) 
{ 
    session_start(); 
}  

// Create array to hold error messages (if any)
$ErrorMsgs = array();

// Create new mysql connection object
$DBConnect = @new mysqli("localhost","root@localhost", 
            NULL,"Ladle");

// Check to see if connection errno data member is not 0 (indicating an error)
if ($DBConnect->connect_errno) {

    // Add error to errors array
    $ErrorMsgs[]="The database server is not available.".
               " Connect Error is ".$DBConnect->connect_errno." ".
               $DBConnect->connect_error.".";
}
?>

Esta es mi clase:

 <?php 
    class EventCalendar {
        private $DBConnect = NULL;

        function __construct() {
            // Include the database connection data
            include("inc_LadleDB.php");
            $this->DBConnect = $DBConnect;  
        }

        function __destruct() {
            if (!$this->DBConnect->connect_error) {
                $this->DBConnect->close();
            }
        }

        function __wakeup() {
            // Include the database connection data
            include("inc_LadleDB.php");     
            $this->DBConnect = $DBConnect;
        }


        // Function to add events to Zodiac calendar
        public function addEvent($Date, $Title, $Description) {
            // Check to see if the required fields of Date and Title have been entered
            if ((!empty($Date)) && (!empty($Title))) {
                /* if all fields are complete then they are 
                   inserted into the Zodiac event_calendar table */
                $SQLString = "INSERT INTO tblSignUps".
                           " (EventDate, Title, Description) ".
                           " VALUES('$Date', '$Title', '".
                            $Description."')";

                // Store query results in a variable
                $QueryResult = $this->DBConnect->query($SQLString);

No soy muy bueno con OOP PHP y no estoy seguro de por qué se genera este error. Saqué este código de otro lugar y lo único que cambié fue el @new mysqli parámetros ¿Alguien puede ayudarme a entender qué está pasando mal?

  • ¿Dónde está la línea 43 a la que se refiere el error?

    – Marc B.

    12 de noviembre de 2013 a las 19:16

  • Intenta corregir tu objeto mysqli: $DBConnect = @new mysqli("localhost","root","","Ladle");

    – Aycan Yasit

    12 de noviembre de 2013 a las 19:16


  • Lo siento… prueba arriba primero, puedes alcanzar el objeto mysqli…

    – rernesto

    12 de noviembre de 2013 a las 19:18


  • ¿Por qué suprimen los errores por parte del @ al llamar new mysqli()?

    -Gottlieb Notschnabel

    12 de noviembre de 2013 a las 19:18

  • @AycanYaşıt gracias, funcionó, lo siento, no estaba seguro de cómo especificar la contraseña NULL o los campos de usuario correctamente

    – codificaciónManiac

    12 de noviembre de 2013 a las 19:36

mysqliquery No se pudo obtener mysqli
T.Todua

Probablemente en algún lugar tienes DBconnection->close(); y luego algunas consultas intentan ejecutarse.


Insinuación: A veces es un error insertar ...->close(); en __destruct() (porque __destruct es un evento, después del cual será necesario ejecutar consultas)

  • tenía el mismo problema “mysqli::query (): no se pudo obtener mysqli”. Lo busqué en Google y encontré esta respuesta. Estaba cerrando demasiado tarde. Después de conectar y consultar la base de datos, incluí un nuevo archivo php que no conocía la conexión, por lo que se mostró el mensaje. solo comentando si alguien más se encuentra con este problema. salud

    – Fernando Fatal

    11 de abril de 2016 a las 14:04

  • Felicitaciones, TT Lección aprendida: no permita que nada destruya el objeto DB a través de un método __destruct().

    – Kevin_Kinsey

    31 de agosto de 2018 a las 19:32

  • @T.Touda __destruct no se dispara después de la construcción de CLASS pero “Se llamará al método destructor tan pronto como no haya otras referencias a un objeto en particular, o en cualquier orden durante la secuencia de apagado”. Ver: php.net/manual/en/language.oop5.decon.php

    – Alex

    18 de marzo de 2020 a las 7:48

El motivo del error es una inicialización incorrecta del objeto mysqli. La verdadera construcción sería así:

$DBConnect = new mysqli("localhost","root","","Ladle");

  • ¿Puede explicar por qué exactamente el código original es “incorrecto”? Si las credenciales eran incorrectas (y ese es el único cambio que veo), debería haber un mensaje de error claro al respecto

    –Nico Haase

    27 de febrero de 2019 a las 8:55

  • @NicoHaase Es simple, la contraseña para el usuario raíz es una cadena vacía y NULL está provisto. Cuando las credenciales son incorrectas, el mensaje de error generalmente es como un error dado en la parte superior de la pregunta.

    – Aycan Yasit

    27 de febrero de 2019 a las 11:52

  • @AycanYaşıt, pero ¿en qué caso recibiría el mensaje de error “No se pudo obtener mysqli” al proporcionar credenciales incorrectas? Además, la documentación establece que cuando no se usa ningún argumento, se selecciona un usuario sin contraseña

    –Nico Haase

    27 de febrero de 2019 a las 12:17

1646970127 787 mysqliquery No se pudo obtener mysqli
Ratnadeep Chakraborty

Yo tuve el mismo problema. Cambié el parámetro localhost en el objeto mysqli a ‘127.0.0.1’ en lugar de escribir ‘localhost’. Funcionó; No estoy seguro de cómo o por qué.

$db_connection = new mysqli("127.0.0.1","root","","db_name");

Verifique si el nombre de la base de datos no tiene “_” o “-” eso ayuda en mi caso

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad