not mac installed debugger php mysqli xdebug

mac - xdebug phpstorm



mysqli+xdebug breakpoint despuĆ©s del cierre de la declaraciĆ³n genera muchas advertencias (4)

Hay algunos problemas similares reportados
http://bugs.xdebug.org/view.php?id=900
https://bugs.php.net/bug.php?id=60778

Una forma de deshacerse de estos mensajes es agregar

unset($stmt);

Después de cerrar la declaración y antes del punto de interrupción. Si esto no ayuda, también debe agregar

unset($connection);

Después de cerrar la conexión como lo menciona @Martin en los comentarios.

Esto no resuelve el problema en sí mismo, pero le permite continuar con su trabajo hasta que esto pueda solucionarse en algún momento.

EDITAR : Ahora también hay un problema informado :)

EDIT : esto parece ser un error en el controlador MySQLi como se informa here .

EDITAR : Parece que este error no aparece si utiliza DOP. Así que esta es quizás otra razón para cambiar a DOP.

Tengo un trozo de código como este:

$conn = new mysqli($host, $username, $passwd, $dbname); ... $stmt = $conn->prepare(''SELECT ...''); $stmt->bind_param(...); $stmt->execute(); $stmt->bind_result(...); while($stmt->fetch()) { // do something here } $stmt->close(); ... // do something more here that has absolutely nothing to do with $stmt

Esto funciona perfectamente bien. Obtengo los resultados que esperaba, no hay errores ni nada que se supone que no debe suceder.

Pero si establezco un punto de interrupción (Xdebug 2.2.5 / 2.2.6 / 2.2.8 / 2.3.2 y PHP 5.5.3 / 5.5.15 / 5.6.0 / 5.6.6 / 5.6.10) en una línea después de $stmt->close(); , Recibo muchas advertencias como

Acceso a la propiedad no está permitido todavía

o

No se pudo obtener mysqli_stmt

Pensé que no pude cerrar otra declaración mysqli, pero obtuve todos los resultados. Parece que no hay problema en mi código ...

¿Hay alguna manera de deshacerse de estas advertencias equivocadas?

Actualización : este problema todavía existe en PHP 7.0.1 / Xdebug 2.4.0 RC3.


He estado recibiendo un error similar con PHP 7.1.1 / Xdebug 2.5.1 al intentar medir la cobertura de prueba en la consola, sin un IDE:

mysqli_init(): Property access is not allowed yet in /home/www/wp-includes/wp-db.php on line 1515

La solución fue comentar todas las configuraciones relacionadas con xdebug en php.ini . Parece que en mi caso fueron copiados y pegados de una versión anterior y causaron problemas. Sin esos ajustes todos empezaron a funcionar perfectamente.

PS: Lo que tenía en la configuración antes de la eliminación es:

xdebug.auto_trace = 1 xdebug.collect_includes = 1 xdebug.collect_params = 1 xdebug.collect_return = 1 xdebug.default_enable = "On" xdebug.extended_info = 1 xdebug.idekey = "xdebug" xdebug.max_nesting_level = 100 xdebug.remote_enable = 1 xdebug.remote_autostart=1 xdebug.remote_handler = "dbgp" xdebug.remote_host = "127.0.0.1" xdebug.remote_port = 9000 xdebug.show_local_vars = 9 xdebug.var_display_max_children = 128


Lo que Alan quiere decir es que puedes usar estos fragmentos de la siguiente manera:

$stmt = $conn->prepare(''SELECT ...''); $stmt->bind_param(...); $stmt->execute(); $stmt->bind_result(...); while($stmt->fetch()) { // do something here } // Disable the buggy interconnection between xDebug and PHP/MySQLi for a certain period if (function_exists(''xdebug_disable'')) { $errorlevel=error_reporting(); $displayerrors=ini_get(''display_errors''); ini_set(''display_errors'',0); error_reporting(0); xdebug_disable(); } $stmt->close(); unset($stmt); unset($conn); // finalle bring back the functionality if (function_exists(''xdebug_enable'')) { xdebug_enable(); error_reporting($errorlevel); ini_set(''display_errors'',$displayerrors); }

Para mí, esto también funcionó en PHP 5.6 y lo uso como solución alternativa en https://github.com/joshcam/PHP-MySQLi-Database-Class

Me gusta en MSQLiDB.php -> _dynamicBindResults ():

/* BUG http://.com/questions/25377030/mysqli-xdebug-breakpoint-after-closing-statment-result-in-many-warnings temporarily disable the buggy module interconnection */ if (function_exists(''xdebug_disable'')) { $errorlevel=error_reporting(); $displayerrors=ini_get(''display_errors''); ini_set(''display_errors'',0); error_reporting(0); xdebug_disable(); } /* Returning to normal xDebugging is only possible after $this->_mysqli->close if (function_exists(''xdebug_enable'')) { xdebug_enable(); error_reporting($errorlevel); ini_set(''display_errors'',$displayerrors); } * */ $stmt->close();

Tenga en cuenta que en realidad no puedo volver a habilitar xDebugging inmediatamente porque esta biblioteca destruye el objeto MySQLi muy tarde. Pero eso parece no ser una razón para que el depurador deje de mostrar información de depuración: -> Todavía no tenía tiempo para averiguar por qué.


/* PHP 7.0.5 - MYSQLi (mysqlnd 5.0.12-dev) - XDEBUG 2.4 */ /* This one will allow breakpoints before / after / step through */ if (function_exists(''xdebug_disable'')) { $errorlevel=error_reporting(); $displayerrors=ini_get(''display_errors''); ini_set(''display_errors'',0); error_reporting(0); xdebug_disable(); } mysqli_close($DATA_DBH); unset($DATA_DBH); if (function_exists(''xdebug_enable'')) { xdebug_enable(); error_reporting($errorlevel); ini_set(''display_errors'',$displayerrors); }