Edit report at https://bugs.php.net/bug.php?id=60882&edit=1

 ID:                 60882
 Comment by:         vitalif at yourcmc dot ru
 Reported by:        balshoy dot tone at gmail dot com
 Summary:            PDO crashes PHP FastCGI daemon when querying Sphinx
                     server
 Status:             Open
 Type:               Bug
 Package:            PDO related
 Operating System:   Ubuntu 11.10
 PHP Version:        5.4.0RC6
 Block user comment: N
 Private report:     N

 New Comment:

I've discovered what's the error is using gdb - MysqlND can't determine the 
charset when connecting to Sphinx, because it skips authentication.

So the workaround is very simple - add ";charset=utf8" to your DSN.
Like the following:
$dsn = "mysql:host=127.0.0.1;port=9306;dbname=index;charset=utf8";

+ just for the information, stack trace of php crash:
Program received signal SIGSEGV, Segmentation fault.
mysqlnd_cset_escape_slashes (cset=0x0, newstr=0x7f5521562ce1 "", 
escapestr=0x7f552146d438 "майка", escapestr_len=<value optimized out>)
    at /home/pspesivt/setup/php-5.4.4/ext/mysqlnd/mysqlnd_charset.c:719
719                     if (cset->char_maxlen > 1 && (len = 
cset->mb_valid(escapestr, end))) {
(gdb) bt
#0  mysqlnd_cset_escape_slashes (cset=0x0, newstr=0x7f5521562ce1 "", 
escapestr=0x7f552146d438 "майка", escapestr_len=<value optimized out>)
    at /home/pspesivt/setup/php-5.4.4/ext/mysqlnd/mysqlnd_charset.c:719
#1  0x0000000000765e41 in php_mysqlnd_conn_data_escape_string_pub 
(conn=0x7f5521562238, newstr=0x7f5521562ce1 "", escapestr=0x7f552146d438 
"майка", escapestr_len=10)
    at /home/pspesivt/setup/php-5.4.4/ext/mysqlnd/mysqlnd.c:1470
#2  0x00000000005fe5dd in mysql_handle_quoter (dbh=<value optimized out>, 
unquoted=0x7f552146d438 "майка", unquotedlen=10, quoted=0x2aa2368, 
quotedlen=0x2aa2360, 
    paramtype=<value optimized out>) at 
/home/pspesivt/setup/php-5.4.4/ext/pdo_mysql/mysql_driver.c:309
#3  0x00000000005fdb08 in pdo_parse_params (stmt=0x7f55215628d8, 
    inquery=0x7f552155f278 "SELECT id, WEIGHT() rank FROM sportmaster_catalog 
WHERE MATCH(:query) LIMIT 1000", inquery_len=44704592, outquery=0x7f5521562968, 
    outquery_len=0x7f5521562970) at 
/home/pspesivt/setup/php-5.4.4/ext/pdo/pdo_sql_parser.c:584
#4  0x00000000005fb2bb in zim_PDOStatement_execute (ht=<value optimized out>, 
return_value=0x2aa2298, return_value_ptr=<value optimized out>, 
    this_ptr=<value optimized out>, return_value_used=<value optimized out>) at 
/home/pspesivt/setup/php-5.4.4/ext/pdo/pdo_stmt.c:497
#5  0x00007f5510e9e58f in xdebug_execute_internal 
(current_execute_data=0x7f55215265d8, return_value_used=0) at 
/home/pspesivt/setup/xdebug-2.2.0/xdebug.c:1482
#6  0x000000000085ee56 in zend_do_fcall_common_helper_SPEC (execute_data=<value 
optimized out>) at /home/pspesivt/setup/php-5.4.4/Zend/zend_vm_execute.h:644
#7  0x000000000084c280 in execute (op_array=0x7f552155d518) at 
/home/pspesivt/setup/php-5.4.4/Zend/zend_vm_execute.h:410
#8  0x00007f5510e9eaa9 in xdebug_execute (op_array=0x7f552155d518) at 
/home/pspesivt/setup/xdebug-2.2.0/xdebug.c:1390
#9  0x00000000007e33ff in zend_execute_scripts (type=8, retval=0x0, 
file_count=3) at /home/pspesivt/setup/php-5.4.4/Zend/zend.c:1279
#10 0x0000000000786b47 in php_execute_script (primary_file=0x7fff91c803f0) at 
/home/pspesivt/setup/php-5.4.4/main/main.c:2473
#11 0x0000000000896159 in main (argc=559047608, argv=0x7f55215264e0) at 
/home/pspesivt/setup/php-5.4.4/sapi/fpm/fpm/fpm_main.c:1856


Previous Comments:
------------------------------------------------------------------------
[2012-01-25 14:01:00] balshoy dot tone at gmail dot com

Description:
------------
I have a sphinx server with real time indexes and I'm trying to query them 
using 
PDO via sphinx MySQL protocol.

Every time a script runs into `$pdo->execute(array(1))` part the whole PHP 
FastCGI daemon crashes, no errors displayed in php error log.

Everything works normally when I query ordinary MySQL database this way.
Also provided code works fine in PHP 5.3

Test script:
---------------
$dsn = "mysql:host=127.0.0.1;port=9306;dbname=index";
$pdo = new PDO($dsn, '<user>', '<password>'); 
                
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
$stmt = $pdo->prepare("SELECT * FROM user WHERE id = ?"); 
$rslt = $stmt->execute(array(1)); // crash

var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));

Expected result:
----------------
Either result set or PDO exception should be displayed.

Actual result:
--------------
Script fails silently without any records in error.log
Also PHP FastCGI daemon gets terminated.


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=60882&edit=1

Reply via email to