ID: 37445 Comment by: mark-phpbug at vetrex dot org dot uk Reported By: dhrubab at gmail dot com Status: Assigned Bug Type: PDO related Operating System: Linux PHP Version: 5.1.4 Assigned To: wez New Comment:
I also have this problem but using bindValue() instead of bindParam() Previous Comments: ------------------------------------------------------------------------ [2006-06-03 20:13:01] [EMAIL PROTECTED] Reverting mysql_statement.c from 1.48.2.13 to 1.48.2.12 did not fix the problem for me. ------------------------------------------------------------------------ [2006-06-03 20:07:04] [EMAIL PROTECTED] Same here, Debian Sarge AMD64 # gdb /usr/sbin/apache2 GNU gdb 6.3-debian Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-linux"...(no debugging symbols found) Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run -X Starting program: /usr/sbin/apache2 -X (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) [Thread debugging using libthread_db enabled] [New Thread 182925889008 (LWP 27843)] Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 182925889008 (LWP 27843)] 0x0000002a9a67e717 in mysql_more_results () from /usr/lib/libmysqlclient.so.15 (gdb) bt #0 0x0000002a9a67e717 in mysql_more_results () from /usr/lib/libmysqlclient.so.15 #1 0x0000002a9a55a141 in pdo_mysql_stmt_dtor (stmt=0x82e2c8) at /tmp/tmpDAHJQf/PDO_MYSQL-1.0.2/mysql_statement.c:71 #2 0x0000002a9a44c730 in free_statement (stmt=0x82e2c8) at /tmp/tmpTQaDT7/PDO-1.0.3/pdo_stmt.c:2200 #3 0x0000002a9a44c7e9 in pdo_dbstmt_free_storage (stmt=0x82bc60) at /tmp/tmpTQaDT7/PDO-1.0.3/pdo_stmt.c:2245 #4 0x0000002a9820702e in zend_objects_store_del_ref () from /usr/lib/apache2/modules/libphp5.so #5 0x0000002a981edcc0 in _zval_dtor_func () from /usr/lib/apache2/modules/libphp5.so #6 0x0000002a981e44e9 in _zval_ptr_dtor () from /usr/lib/apache2/modules/libphp5.so #7 0x0000002a98209143 in execute () from /usr/lib/apache2/modules/libphp5.so #8 0x0000002a982089bc in execute () from /usr/lib/apache2/modules/libphp5.so #9 0x0000002a98208edc in execute () from /usr/lib/apache2/modules/libphp5.so #10 0x0000002a982089bc in execute () from /usr/lib/apache2/modules/libphp5.so #11 0x0000002a9820c6d8 in execute () from /usr/lib/apache2/modules/libphp5.so #12 0x0000002a982089bc in execute () from /usr/lib/apache2/modules/libphp5.so #13 0x0000002a981ef907 in zend_execute_scripts () from /usr/lib/apache2/modules/libphp5.so #14 0x0000002a981b66a2 in php_execute_script () from /usr/lib/apache2/modules/libphp5.so #15 0x0000002a98254768 in zend_get_zval_ptr_ptr () from /usr/lib/apache2/modules/libphp5.so #16 0x0000000000434b71 in ap_run_handler () #17 0x0000000000435199 in ap_invoke_handler () #18 0x00000000004278a6 in ap_process_request () #19 0x00000000004234ac in _start () #20 0x000000000043f181 in ap_run_process_connection () #21 0x00000000004333ee in ap_graceful_stop_signalled () #22 0x00000000004335ae in ap_graceful_stop_signalled () #23 0x0000000000433615 in ap_graceful_stop_signalled () #24 0x0000000000433d2c in ap_mpm_run () #25 0x0000000000439be7 in main () (gdb) frame 7 #7 0x0000002a98209143 in execute () from /usr/lib/apache2/modules/libphp5.so (gdb) print (char *)(executor_globals.function_state_ptr->function)->common.function_name $1 = 0x2a9a44e3e5 "query" (gdb) print (char *)executor_globals.active_op_array->function_name $2 = 0x82a288 "Database" ------------------------------------------------------------------------ [2006-05-27 13:47:53] [EMAIL PROTECTED] $oDB= new PDO('mysql:host=localhost;dbname=yourdb', 'user', 'pass'); // emulated or not does not matter $oDB->setAttribute(PDO :: ATTR_EMULATE_PREPARES, true); $oStm = $oDB->prepare("SELECT * FROM tbl WHERE xyz=:character_set"); $oStm->bindParam(':character_set', 'foo); For the record, the problem here is only about how PDO manages to free its resource when a fatal error or exit() occurs. In this example, it is a fatal error raise with the bindParam call (it expects a variable as it uses a reference). The problem is the same in many other bug reports (unexpected script exist, like exit() in a function). The solution is to always set query_stmt in the dbh struct, and add another flag to define if there was an error or not. I have patches that fix the problem for mysql. To be sure I don't break something in the working drivers, I have to install pgsql. ------------------------------------------------------------------------ [2006-05-27 09:56:46] dhrubab at gmail dot com The two urls I provided were broken for a while but have now been relocated to the following two urls. Sorry for any inconvenience. Source: http://static.dhruba.net/bugs/37445.src.html Phpinfo: http://static.dhruba.net/bugs/37445.phpinfo.html I should also mention that I've been getting futher segfaults being caused by a variety of very different code. For example doing var_dump(); followed by exit; within a loop is causing a segfault. I'm not able to reproduce with smaller test cases. Is it okay if I give you a trace for the segfault from my own application since the smaller test cases are sometimes quite difficult to produce? ------------------------------------------------------------------------ [2006-05-26 08:51:04] dhrubab at gmail dot com Has analysis of this problem been started? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/37445 -- Edit this bug report at http://bugs.php.net/?id=37445&edit=1